gitのメモリ不足の回避

gitでgcをかけようとするとメモリ不足のエラーで落ちてしまう。

> git gc

Counting objects: 2746, done.

Delta compression using up to 2 threads.

fatal: Out of memory, malloc failed2)

error: failed to run repack

さて、どうするか、と調べてみると手動でrepackしてやるとよいらしい。(再圧縮コマンド)

> git repack -adf –window-memory=50m

ここの50mの指定は、50メガバイトということながら、内部では–windowの数(デフォルトでは10)の部分を一度に参照しながらするので、ここで無茶な指定をするとやはり落ちてしまう。(ちなみに–window-memoryのデフォルトは0でこれは無限を意味するらしい。)

> git repack -adf –window-memory=50m

Counting objects: 2746, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2672/2672), done.

Writing objects: 100% (2746/2746), done.

Total 2746 (delta 910), reused 0 (delta 0)

Removing duplicate objects: 100% (256/256), done.

今後落ちないようにしておくにはconfig設定をしてやるといいのかも。

> config pack.windowMemory 50m

ただ、これ、おそらくあまり低くすると圧縮効率が悪くなるはず。