2016年1月18日月曜日

Gitサイズが大きいレポジトリのクローンエラー①

Gitサイズが大きいときのクローンでは、エラーが発生することがある。


remote: Counting objects: 13751, done.
remote: Compressing objects:  78% (2213error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

git did not exit cleanly (exit code 128) (2403 ms @ 2016/01/18 18:39:49)


その場合、以下のように、depth=1で1回Cloneしたあと、Fetchすると取得できるようだ。
以下のコマンドでもできるが、トータスGitなどを使えば、 GUIからも可能。


コマンド例
git clone --depth 1 http://hoge.com/hoge.git
git fetch --depth 5
git fetch --depth 20
git fetch --unshallow


また、サーバ側での設定を変えることで対応することもできる。

サーバ側のConfigファイルに以下の設定をする。
(pack配下だけでいいかも。値はサーバに応じて設定)

[core]
    packedGitLimit = 4000m
    packedGitWindowSize = 1000m
[pack]
    windowMemory = 4000m
    SizeLimit = 4000m
    threads = 1
    window = 0