4

git fetchローカル マシン上の 1 つの (非常に大きな) リポジトリから別のリポジトリに参照を取得するためにを使用するとgit upload-pack、パック ファイルの作成に非常に長い時間がかかります。ローカルの場合、転送されるデータの量を最小限に抑える必要はありません。また、デルタ圧縮が失われることによって失われるディスク容量についても気にしません。したがって、理想的には、欠落しているオブジェクトをパックしてからコピーするよりもコピーすることを好みます。インポートされました。git fetchローカル トランスポートを使用するときに不足しているオブジェクトをコピーする ように指示する方法はありますか?

または、より一般的には、パック ファイルの生成をグローバルに抑制する方法はありますか? 本当に、同一のファイルに余分なスペースを使用しないバージョン管理されたファイルシステムとして git を使用したいだけです。パッキングと再パッキングは、これを厄介にする時間のかかるステップのようです。

ちなみに、再パックにそれほど時間がかからないように (またはスラッシングを開始しないように)、設定オプションを最適化することに時間を費やしたので、「これらの設定オプションを使用すると、パッキングがはるかに速くなる」という答えはないと思いますが、 、おそらく私はそれをすべて間違っているので、明確にするために、私が通常使用している設定オプションは次のとおりです(2 GiBのRAMを使用したマッチングで):

core.deltacachesize=1
core.packedgitwindowsize=16m
core.packedgitlimit=128m
pack.packsizelimit=512m
pack.windowmemory=200m
pack.deltacachesize=200m
pack.window=4
pack.compression=3
pack.threads=0
gc.auto=0
gc.pruneexpire=never
receive.autogc=false
4

3 に答える 3

2

昔ながらのgit cloneクローンが作成されないリポジトリがあります。

$ git clone $url
Cloning into foo...
remote: Counting objects: 6142, done.
error: pack-objects died of signal 9839/6058)   
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

上書きする進行状況テキストによって隠されていますが、失敗したエラーメッセージはerror: pack-objects died of signal 9です。

クライアント側のパッキングを無効にすることでエラーを防ぐことができました。私はこれを、基本的に何をするかを実行する一連のコマンド(git 1.7.4.1で発行)を発行することによって行いましたが、実行する前git cloneに設定する追加のコマンドを使用しました。pack.depth0git fetch

mkdir foo
cd foo
git init
git remote add origin $url
git config pack.depth 0
git fetch origin
git branch --set-upstream origin origin/master
git checkout master
于 2011-03-24T15:50:44.687 に答える
2

おそらく、代替(代替オブジェクト ストレージ) メカニズムを使用できます。これにより、オブジェクト データベースを他のローカルリポジトリと共有できるようになり、それらをパックする必要がなくなります。

これを設定するには、ローカル リポジトリからクローンを作成する場合、またはリモート リポジトリからクローンを作成するがローカルに同様のリポジトリがある場合、または単にファイルを編集する場合は、いずれかのオプションを使用して「 git clone」を使用します。--shared--reference <repository>.git/objects/info/alternates

于 2010-07-26T11:24:28.980 に答える
0

http-backendおそらく(テストされていません)最初のレポ(フェッチ元のレポ)の設定です。

この種のサーバーには、あなたのケースで興味深い設定があります:

http.uploadpack

これはサービスgit fetch-packgit ls-remoteクライアントです。
これはデフォルトで有効になっていますが、リポジトリはこの構成項目を false に設定することで無効にすることができます。

于 2010-07-26T08:22:03.243 に答える