Сжатие Git Repo - объект в пакете, а не в коммитах
Я пытаюсь сжать репозиторий Git, который составляет около 2 ГБ.
Я следую за разделом "Удаление объектов" главы 9 (9.7) в книге ProGit: http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery
После запуска git gc
, затем git verify-pack
а также git rev-list
команда, я нашел .tar
файл, который составляет около 118 МБ. Мне не нужно, чтобы это было в моем репо вообще. Это нужно уничтожить навсегда.
Но когда я пытаюсь выяснить, какие коммиты использовали этот файл, я ничего не получаю:
git log --oneline -- news/news.tar
Означает ли это, что файл отсутствует в истории хранилища? И если это так, могу ли я просто оставить его или он все равно будет выдвинут как объект git push
?
Если это так, как мне избавиться от этого.
1 ответ
Используйте BFG, а не git-filter-branch...
BFG дает надежный метод избавления от больших файлов, гораздо проще, чем с помощью git filter-branch
см. http://rtyley.github.io/bfg-repo-cleaner/:
$ bfg --strip-blobs-bigger-than 100M my-repo.git
...все еще здесь?
Если вы хотите попытаться выяснить, что пошло не так, когда вы выполняли шаги, описанные в разделе "Удаление объектов" в разделе 9.7 книги ProGit, к сожалению, есть несколько мест, где можно ошибиться.
news.tar
В настоящее время файл хранится в одной из ваших веток, тегах или других ссылках - мы знаем это, потому что файл обнаружился при запуске git rev-list --objects --all
(параметр '--all' означает просмотр всех ссылок, кроме веток - тегов и других экзотических типов ссылок) ... но ваш git log --oneline -- news/news.tar
команда не имеет --all
это просто список вашей текущей ветви. Ваш BLOB-объект удерживается другой ссылкой - возможно, другой веткой или тегом.
Серьезно, просто используйте BFG.
Полное раскрытие: я являюсь автором BFG Repo-Cleaner.