Как удалить папку из истории git навсегда, используя BFG - PullRequest
1 голос
/ 27 мая 2019

Я использую 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.

1 Ответ

1 голос
/ 28 мая 2019

Как вы уже убедились в моих предложениях в комментариях выше, проблема с пробелом в "{system1, system2}".Когда это выражение обрабатывается, оно расширяется до "system1" и " system2", с пробелом перед system2,, что не то, что вам нужно.

Вы можете запустить процесс двумя командами, один раз сsystem1 и один раз с system2, или просто удалите пробел, и все будет работать.

Интересно, что расширение {a,b}, похоже, выполняется самим bfg, а не bash: кавычки говорят bashпередать эту строку буквально, поэтому, хотя это выглядит как синтаксис bash, на самом деле это не расширение bash.

...