Gitリポジトリ内の大容量ファイルを特定する
巨大なファイルがあるとクローンに時間がかかる
Gitリポジトリに巨大なファイルをコミットするとクローンに時間がかかるようになる。
下記の手順で調査を行うことで巨大なファイルを特定できる。特定したファイルを履歴から抹消することでリポジトリのサイズを小さくすることができる。
オブジェクトファイルをパッキングする
下記コマンドを実行してpackfile
を作成する。クローン直後であれば必要ない。
cd /path/to/repository
git gc
オブジェクトファイルをサイズ順に表示する
下記コマンドを実行するとサイズが大きい順に100件表示する。
git verify-pack -v .git/objects/pack/pack-*.idx |
grep blob |
sort -k3nr |
head -n 100 |
ruby -ane 'IO.popen("git rev-list --all --objects | grep #{$F[0]}", &:read).split.tap {|path| puts [$F[0],path[1..]&.join,$F[2],$F[3]].join("\t") }'
git verify-pack
はpackfile
内のオブジェクトの情報を表示するコマンドで下記のフォーマットで出力する。
SHA-1 type size size-in-packfile offset-in-packfile
git rev-list
でオブジェクトのパスとハッシュの一覧を出力できるため1列目の情報からパスを取得し、3列目と4列目のサイズ情報を表示することでサイズの大きいファイルを特定できる。