最終的な更新と修正:ここでの解決策は、CygwinGitではなくWindowsGitを使用するという2つの組み合わせであることが判明しました。 as Graham Borlandsuggested 、およびGit構成設定pack.threads = 1
およびgc.aggressiveWindow = 150
。
大規模なローカルGitリポジトリ、約40,000コミットのSVNリポジトリのgit svn clone
があります。このリポジトリでgit gc
を実行しようとしていますが、どこにも行きません。
$ git gc --auto
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 25966, done.
Compressing objects: 100% (25249/25249), done.
fatal: Out of memory, malloc failed (tried to allocate 426523986 bytes)
error: failed to run repack
Cygwin内で4GBRAMを搭載した64ビットデュアルコアWin7マシンでGit1.7.5.1を実行しています。 .git
ディレクトリは現在6.1GB強です。
git gc --aggressive
を実行して、より完全なシステムで修正できるかどうかを確認しましたが、うまくいきません。同じサイズのmalloc
を試行しても、上記と同様のメッセージが表示されますが、かなり多いオブジェクト数(508,485カウント、493,506圧縮)。
また、Googleが提案しているように、[pack]
ファイルの.gitconfig
部分にさまざまな調整を試みました。最も完全なものは 別のStackOverflowの質問 からです。私の.gitconfig
には次の関連行がありますが、これらを設定しても違いはないようです。
[pack]
windowMemory = 16m
threads = 1
window = 1
depth = 1
deltaCacheSize = 1
リポジトリをgit
からgc
に取得する方法について何か提案はありますか?
編集: Mark Longair推奨 さらに.gitconfig
ファイルの変更。私が作った、以下の新しい行。しかし、変更は何の違いもありませんでした。
[core]
packedGitWindowSize = 1m
packedGitLimit = 256m
[pack]
packSizeLimit = 128m
編集2: Michael Krelin推奨 スワップ/ページファイルサイズを増やす(WinXP命令- ここ 、Win7でも同様です)。私はそれを試しましたが、違いはありませんでした。実際、使用可能な最大サイズを増やすだけで、Windowsが使用しているページファイルのサイズを決して増やそうとしなかったように見えます。
私は今、これがCygwin内のメモリ制限によるものなのか、Cygwinに課せられたものなのかを調べています。 「課せられた」をチェックするために、管理者権限でCygwinを実行しようとしています。 「内」(より可能性が高いように見える)をチェックするために、私は Cygwinの最大メモリ設定 で遊んでいます。
編集3:Cygwinの使用を好むかもしれませんが、WindowsGitクライアントはメモリの問題をうまく処理していることがわかりました。リポジトリを整理する必要があるときは、頻繁にそれにフォールバックするようです。
Cygwin内で実行するよりも、 msysGit などのネイティブWindowsクライアントを実行する方が運が良い場合があります。
私は同じ問題を抱えていましたが、これまでに述べた解決策を試しましたが成功しませんでした。しかし、大きな画像ファイルをリポジトリに追加した後にgit gcの問題が発生したため、.gitattributesファイルを作成し、それらの大きなファイルのデルタ圧縮をオフにしました。
*.tga -delta
*.psd -delta
機能した。
デフォルト値よりも低い値に制限してみてください。その他の構成オプションには、次のものがあります。
pack.packSizeLimit
core.packedGitWindowSize
core.packedGitLimit
...これらはすべて git config
ドキュメント 。私が過去に間違えた、どのユニットが理解されているかをそれぞれの場合にチェックすることは特に価値があります。
共有Linuxホスティングでこのエラーを回避するのに役立つ唯一のことは、追加することでした
[pack]
packSizeLimit = 64m
threads = 1
に
.gitconfig
最も重要なのは「スレッド= 1」でした
たぶん、一時的に実物よりも大きなスワップファイルを追加し、他の場所で数杯のコーヒーを飲むと役立つでしょうか?