Я переписал историю моего репозитория, чтобы удалить некоторые большие FLV файлы, используя git filter-branch
. Я прежде всего следовал статье статьи Github о удалении конфиденциальных данных и аналогичных инструкциях, найденных в другом месте в Интернете:
Удаление больших FLV:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch public/video/*.flv' --prune-empty -- --all
Удаление исходных ссылок:
rm -rf .git/refs/original/
Очистка reflog:
git reflog expire --expire=now --all
Обрезка недостижимых объектов:
git gc --prune=now
Агрессивная обрезка недостижимых объектов:
git gc --aggressive --prune=now
Переупаковка:
git repack -A -d
И мой gitdir по-прежнему составляет 205 МБ, содержащийся почти полностью в одном пакете:
$ du -h .git/objects/pack/*
284K .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.idx
204M .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.pack
Используя этот script, я вижу, что FLV, которые я удалил, все еще содержатся в пакете:
All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file.
size pack SHA location
17503 17416 1be4132fa8d91e6ce5c45caaa2757b7ea87d87b0 public/video/XXX_FINAL.flv
17348 17261 b7aa83e187112a9cfaccae9206fc356798213c06 public/video/YYY_FINAL.flv
....
Клонирование репозитория через git clone --bare my-repo
дает my-repo.git
, который также имеет размер 205 МБ.
Что я могу сделать, чтобы удалить эти (предположительно) объекты без ссылок из пакета и уменьшить размер моего репозитория до размера, если бы они никогда не были зафиксированы? Если они все еще ссылаются, как-нибудь, есть ли способ сказать, где?
Обновление
При попытке повторного запуска git filter-branch
я получил это уведомление:
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
Я проверил, что в .git/refs/original
есть no refs, действительно, каталог вообще не существует. Есть ли другой способ, которым git хранит ссылки, о которых я не знаю?