Как навсегда удалить папку из истории git с помощью BFG

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

Просто чтобы уточнить, system2 все еще там, но файлы тоже все еще в нем? А еще мне не нравится "{system1, system2}". Помещая это в кавычки, вы передаете эту строку как есть в bfg, а не расширяете ее оболочкой. Пробел после запятой тоже кажется плохой идеей. Вы пытались запустить его двумя командами, по одной на папку?

joanis 27.05.2019 20:31

Да и другие файлы тоже есть. Я попробую ваше предложение и дам вам знать.

mato 28.05.2019 01:29

@joanis Итак, я попробовал, как вы сказали, сделав их по отдельности, и это сработало. Проблема, вероятно, в "{system1, system2}" части сценария, как вы сказали.

mato 28.05.2019 02:31

Поиграв еще с командой 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}".

mato 28.05.2019 17:15

Хорошо, спасибо, что сообщили мне. Я тогда напишу ответ.

joanis 28.05.2019 21:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
570
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме