Сжатие 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.

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