を使用して大きな 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 MB で、ほぼ完全に 1 つのパックファイルに含まれています。
$ du -h .git/objects/pack/*
284K .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.idx
204M .git/objects/pack/pack-f72ed7cee1206aae9a7a3eaf75741a9137e5a2fe.pack
このスクリプトを使用すると、削除した 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
....
同じく 205MB のサイズの yields をgit clone --bare my-repo
介してリポジトリをクローンします。my-repo.git
これらの (おそらく) 参照されていないオブジェクトをパックから削除し、リポジトリをコミットされていない場合のサイズに縮小するにはどうすればよいですか? それらがまだ何らかの形で参照されている場合、どこにあるのかを知る方法はありますか?
アップデート
を再実行しようとしたところ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
。実際、ディレクトリはまったく存在しませんでした。私が知らない、gitが参照を保存する他の方法はありますか?