Полностью удалить файл из целого хранилища git
Используя git для проекта, я случайно добавил в commit большой файл .zip
. Я не заметил, пока не начал загружать его в github. Когда я заметил, я нажал ctrl-c
, git remove
, git commit
и загрузил его снова (теперь с файлом без следа).
Я знаю, что это был неправильный выбор, потому что как только я совершил .zip
, он остается в репо, пока я не вернусь к фиксации, но, к сожалению, я этого не сделал.
Теперь, когда кто-то пытается загрузить из репо, для этого требуется много времени, иногда дает git the remote end hung up unexpectedly
(который я прочитал, можно решить, выполнив несколько git config
) и очень раздражает.
Моя точка зрения: есть способ рассказать дальнейший запрос pull/fetch, который забудет этот конкретный файл в этой конкретной версии фиксации?
Ответы
Ответ 1
Github предоставляет полезную справочную страницу об удалении файлов. Есть также другие вопросы по StackOverflow, которые охватывают этот
См. также этот раздел в книге Pro Git, приведенный здесь пример:
Чтобы удалить файл с именем passwords.txt из всей истории, вы можете используйте опцию -tree-filter для фильтрации-ветки:
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten
После очистки вы также можете попробовать git gc для дальнейшего сжатия и очистки для репозитория.
Ответ 2
Здесь есть инструмент, который теперь называется "BFG Repo-Cleaner", он упоминается на github.com в качестве альтернативы фильтрации-ветки https://help.github.com/articles/remove-sensitive-data/
Ссылка на страницу инструмента https://rtyley.github.io/bfg-repo-cleaner/