古い cvs リポジトリ (約 13GB) を git (約 2.7GB) に移行しました。しかし、32 ビット ワークステーションでレポを複製できません。メモリ不足エラーが発生します (malloc は約 6 MB の割り当てに失敗しました)。これを修正する可能性はありますか?
remote: counting objects: 1227276, done.
remote: Compressing objects: 100% (217540/217540), done.
Receiving objects: 100% (1227276/1227276), 2,66GiB | 791.00KiB/s, done.
remote: Total 1227276 (delta 787852), reused 1227276 (delta 787852)
Resolving deltas: 100% (787852(787852), done.
fatal: Out of memory, malloc failed (tried to allocate 6838754 bytes)
fatal: remote did not send all necessary objects
サーバー: Rhel63 64bit; ワークステーション: Win XP 32 ビット、2GB RAM; Git: 両方で 1.8.3.4。
Update1:サーバー上の 2.8GB のビッグ パック ファイルを 500MB のビッグ パック ファイルに再パックしました。ただし、クライアント側では、クローンには影響しません。2.8GB の大きなパック ファイルを 1 つだけ作成します。git clone プロセスに、より小さいパック ファイルを使用するように指示したり、サーバーに配置されたときにパック ファイルを作成するように指示したりするにはどうすればよいですか? - 私にとって興味深い点: 受信したオブジェクトのサイズが 1.5GB に減少しました。
Update2:いくつかの調査と分析を行った結果、主な問題は、32 ビット ワークステーションで git clone プロセスが 1 つの大きなパック ファイルを処理できないことだと思います。しかし、サイズの小さい複数のパック ファイルを取得するには、クローン作成プロセスをどのように構成すればよいでしょうか? サーバー側では、repack
コマンドで非常にうまく機能しますが、クライアント側には影響しません。
更新 3:これで、1.1 GB の大きな裸の git リポジトリができました (を使用してgit gc --aggressive --prune=now
)。しかし、メモリ不足エラーはまだ残っていました。だから私はレポを分割しようとしました。それにより、私は で使用git rm
しましgit commit -a
た。したがって、2 つの新しいベア リポジトリのサイズは両方とも、古い中央のリポジトリと同じです。しかし、ワークステーションからのクローン作成は機能します。メモリ消費量は一定で < 300MB です。止まらなくなる前に。
ここで質問があります: クローン作成プロセスが問題なく終了するのはなぜですか?