git filter-branch не удаляет мой каталог

У меня есть каталог incubator прямо вверху моего репозитория git, и я хотел бы полностью удалить его из истории. Я пробовал:

git filter-branch --force --tree-filter "rm -rf incubator/" --prune-empty HEAD

И:

git filter-branch --force --index-filter "git rm --cached -r -f --ignore-unmatch incubator" --prune-empty

Но ни один из них не работал.

Я делаю что-то не так здесь? Есть ли способ увидеть, что происходит или почему этот каталог не удаляется?


person Maurício Linhares    schedule 10.02.2015    source источник


Ответы (1)


Переписывание истории Git — сложный процесс, и git-filter-branch не упрощает его (см. ниже), поэтому вместо этого используйте BFG, более простая и быстрая альтернатива git-filter-branch, специально разработанная для удаления ненужных файлов из истории Git.

Внимательно следуйте инструкциям по использованию BFG. Основная часть заключается в следующем:

$ java -jar bfg.jar  --delete-folders incubator  my-repo.git

Любая папка с именем incubator (которой нет в вашем последнем коммите) будет удалена из истории вашего репозитория Git. Затем вы можете использовать git gc для очистки мертвых данных:

$ git gc --prune=now --aggressive

BFG обычно в 10–720 раз быстрее, чем работает git-filter-branch, и в целом проще в использовании.

... диагностика сбоя ветки фильтра git?

Поскольку (как упоминалось выше) переписывание истории Git — сложное дело, существует множество способов, которыми это может пойти не так, поэтому вам, возможно, придется добавить больше деталей в то место, где вы говорите, "Но ни один из они сработали" в вашем вопросе. Заклинание git filter-branch, которое вы используете, выглядит так, будто оно должно что-то сделать — оно удалит папку incubator из вашей ветки master — так оно, по крайней мере, сделало это? Возможно, вы хотели удалить его из других веток, и в этом случае вам нужно добавить флаг --all, или, возможно, вы также хотели удалить его из помеченных коммитов, для чего потребуется --tag-name-filter cat. Подробнее: https://stackoverflow.com/a/21023615/438886

Еще много чего может пойти не так, лучше использовать BFG, если можете.

Полное раскрытие: я автор BFG Repo-Cleaner.

person Roberto Tyley    schedule 10.02.2015