Я использую BFG для удаления двух моих папок. Они отслеживались с момента создания репо. Причина удаления заключалась в том, что эта папка содержит двоичный файл и другой текстовый файл, который нам больше не нужен. Но когда я пытаюсь удалить эти две папки, одна удаляется, а другая все еще существует.
Я создал свое фиктивное репо и сделал несколько коммитов, чтобы воссоздать проблему. Я предполагаю, что myRepo.git — это чистый репо для начала.
Функция, которую я использовал для удаления папок:
java -jar bfg-1.13.0.jar --no-blob-protection --delete-folders "{system1, system2}" myRepo.git
#!/bin/bash
BUILD(){
git clone https://github.com/xxxx/myRepo.git
cd myRepo
echo "Jpt test1" > jpt1.txt
echo "Jpt test2" > jpt2.txt
echo "Jpt test3" > jpt3.txt
git add jpt1.txt jpt2.txt jpt3.txt
git commit -m "first commit"
git push origin master
######
mkdir system1
cd system1
mkfile 14m outputfile1.out
mkfile 14m outputfile2.out
echo "Jpt test1" > sysjpt1.txt
echo "Jpt test2" > sysjpt2.txt
echo "Jpt test3" > sysjpt3.txt
cd ..
######
mkdir system2
cd system2
mkfile 14m outputfile1.out
mkfile 14m outputfile2.out
cd ..
git add system1 system2
git commit -m "tracking large file"
git push origin master
cd ..
##### Call function BFG which does BFG stuff.
BFG
}
BFG(){
# run bfg and let git clean history
git clone --mirror https://github.com/xxxx/myRepo.git
java -jar bfg-1.13.0.jar --no-blob-protection --delete-folders "{system1, system2}" myRepo.git
cd myRepo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
cd ..
mkdir test_new
cd test_new
git clone https://github.com/xxx/myRepo.git
cd myRepo
ls
}
BUILD
Когда я клонирую после очистки и делаю ls
на нем. я получил
jpt1.txt jpt2.txt jpt3.txt system2
. Посмотрите, как папка system2 все еще существует.
Да и другие файлы тоже есть. Я попробую ваше предложение и дам вам знать.
@joanis Итак, я попробовал, как вы сказали, сделав их по отдельности, и это сработало. Проблема, вероятно, в "{system1, system2}"
части сценария, как вы сказали.
Поиграв еще с командой java -jar bfg-1.13.0.jar --no-blob-protection --delete-folders "{system1, system2}" myRepo.git
и перечитав ваш комментарий The space after the comma also seems like a bad idea.
. Пробовал без пробела, вроде работает. Так что я могу подтвердить, что проблема была в пространстве. Итак, последняя команда, которую я выполнил, была java -jar bfg-1.13.0.jar --no-blob-protection --delete-folders "{system1,system2}" myRepo.git
Посмотрите, как теперь есть пробел `"{system1,system2}".
Хорошо, спасибо, что сообщили мне. Я тогда напишу ответ.
Как вы проверили из моих предложений в комментариях выше, проблема связана с пробелом в "{system1, system2}"
. Когда это выражение обрабатывается, оно расширяется до "system1"
и " system2",
с пробелом перед system2,
, что вам не нужно.
Вы можете запустить процесс двумя командами, один раз с помощью system1
и один раз с помощью system2,
или просто убрать пробел, и все будет работать.
Интересно, что расширение {a,b}
, по-видимому, выполняется самим bfg, а не bash: кавычки говорят bash передать эту строку буквально, поэтому, хотя это выглядит как синтаксис bash, на самом деле это не расширение bash.
Просто чтобы уточнить,
system2
все еще там, но файлы тоже все еще в нем? А еще мне не нравится"{system1, system2}"
. Помещая это в кавычки, вы передаете эту строку как есть в bfg, а не расширяете ее оболочкой. Пробел после запятой тоже кажется плохой идеей. Вы пытались запустить его двумя командами, по одной на папку?