(解決済み、質問本文の下部を参照)
これを長い間探していると、今まで持っていたのは次のとおりです。
- 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個)が削除されましたが、最大のファイルはまだ残っています...
リポジトリに2億までの大きなレガシーファイルがありますが、それらは本当に必要ありません...そしてリポジトリを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のバックアップを削除しますgit reflog expire --all --expire='0 days'
-すべての緩いオブジェクトを期限切れにしますgit fsck --full --unreachable
-ゆるい物体がないか確認しますgit repack -A -d
-再梱包git prune
-最終的にそれらのオブジェクトを削除します