Использование --prune=now
на git gc
Несмотря на то, что вы успешно вычеркнули ненужные объекты из истории, похоже, что эти нежелательные объекты не были удалены, потому что они были слишком молоды , чтобы их можно было удалить по умолчанию (см. Документацию по настройке ). на git gc
для более подробной информации). Использование git gc --prune=now
должно справиться с этим, или вы можете увидеть этот ответ для более ядерной опции.
Хотя это и должно решить вашу последнюю проблему, основной проблемой была сложность поиска больших сгустков для их удаления с использованием git filter-branch
- на что я бы сказал:
... не используйте git filter-branch
git filter-branch
болезненно использовать для подобных задач, и есть гораздо лучший, менее известный инструмент под названием BFG , , специально разработанный для удаления Большие файлы из репозитория Git.
Основная команда для удаления больших файлов выглядит так:
$ bfg --strip-blobs-bigger-than 10MB my-repo.git
Любой BLOB-объект размером более 10 МБ (которого нет в вашем последнем коммите) будет полностью удален из истории вашего репозитория - вам не нужно вручную находить файлы себя и файлы в защищенных коммитах безопасны .
Затем вы можете использовать git gc
, чтобы очистить мертвые данные:
$ git gc --prune=now --aggressive
BFG обычно в 1045 * раз в сотни раз быстрее , чем git-filter-branch
в большом репо, и опции адаптированы к этим двум распространенным сценариям использования:
- Удаление Сумасшедшие большие файлы
- Удаление Пароли, учетные данные и другие Личные данные
Полное раскрытие: я являюсь автором репо-очистителя BFG.