tsuyoshin’s Tech Blog

https://qrunch.net/@tsuyoshin から移転してきました。

【 Git 】 .git/objects/ フォルダの容量削減

リポジトリの同期を繰り返し行っていると、gitフォルダの容量が次第に増えてくる。
巨大なリポジトリの場合、gitフォルダの容量増加が特に気になってしまう。
gitフォルダ内で容量を占めているのは objects フォルダである。
objects フォルダの軽量化・容量削減方法を以下に記す。

  • GC前の容量確認
$ du -sh .git/objects/
  • GCを行う。断片化が少ない場合、実行されない
$ git gc --auto
  • --auto で実行されない場合、下記コマンドにてGCを行う
$ git gc

GC実行後、
.git/objects/xx ~ zz フォルダが削除される
.git/objects/pack 内のアーカイブが一つにまとまる

  • .git/objects/pack/ フォルダ内を確認する
$ ls .git/objects/pack/tmp_*

tmp_pack_9YV5SB のように tmp_pack_xxxxxx ファイルがある場合、ファイル削除しても問題ない
tmp_pack_xxxxxx ファイルは、git gc 時の中間ファイルであり git gc が失敗すると残る

  • GC後の容量確認
$ du -sh .git/objects/

使用例

# GC前の容量確認
$ du -sh .git/objects/
3.3G   .git/objects/

# GCを行う。断片化が少ない場合、実行されない
$ git gc --auto

# --auto で実行されない場合、下記コマンドにてGCを行う
$ git gc
Counting objects: 13377, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (10482/10482), done.
Writing objects: 100% (13377/13377), done.
Total 13377 (delta 6875), reused 9051 (delta 2556)

# .git/objects/pack/tmp_pack_xxxxxx ファイルを削除
$ ls .git/objects/pack/tmp_*
$ rm .git/objects/pack/tmp_*

# GC後の容量確認
$ du -sh .git/objects/
2.3G   .git/objects/