(решено, см. нижнюю часть вопроса)
Глядя на это в течение долгого времени, то, что у меня есть до сих пор:
- http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ и
- http://progit.org/book/ch9-7.html
Практически тот же метод, но оба они оставляют объекты в файлах пакетов... Застрял.
Что я пробовал:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_name'
rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
Все еще есть файлы в пакете, и вот как я это знаю:
git verify-pack -v .git/objects/pack/pack-3f8c0...bb.idx | sort -k 3 -n | tail -3
И это:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch file_name" HEAD
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
То же самое...
Пробовал трюк git clone
, он удалил некоторые из файлов (~ 3000 из них), но самые большие файлы все еще там...
У меня есть несколько старых файлов в репозитории, ~ 200M, и я действительно не хочу их там... И я не хочу, чтобы reset хранилище 0: (
РЕШЕНИЕ: Это самый короткий способ избавиться от файлов:
- check.git/packed-refs - моя проблема заключалась в том, что у меня была строка
refs/remotes/origin/master
для удаленного репозитория, удалить ее, иначе git не удалит эти файлы - (необязательно)
git verify-pack -v .git/objects/pack/#{pack-name}.idx | sort -k 3 -n | tail -5
- для проверки самых больших файлов - (необязательно)
git rev-list --objects --all | grep a0d770a97ff0fac0be1d777b32cc67fe69eb9a98
- проверить, что это за файлы -
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_names'
- удалить файл из всех версий -
rm -rf .git/refs/original/
- удалить git backup -
git reflog expire --all --expire='0 days'
- для истечения всех свободных объектов -
git fsck --full --unreachable
- чтобы проверить, есть ли свободные объекты -
git repack -A -d
- переупаковка -
git prune
- для окончательного удаления этих объектов