4

ファイルの大きなセット (50 GB) があり、それらは遠く離れた 2 つのホストにあり、それらを複数の Git リポジトリに配置して、それぞれが反対側のリポジトリのミラー リポジトリになるようにしたいと考えています。しかし、ネットワーク経由でファイルを転送したくありません。時間がかかるため (50 ~ 60 時間)、ファイルが既に両側にあるため不要です。

私のアイデアは、両側に Git リポジトリを作成し、両側のすべてのファイルをローカル リポジトリに追加してから、一方から他方に git-pull することでした。Git は、ファイル (オブジェクト) が同一であり、それらを転送しないことを知るのに十分賢いと思いました。しかし、ほんの小さなサンプルでは、​​プルを実行するのに長い時間がかかり (ほとんどの場合、「オブジェクトのアンパック」段階で)、2 つの間のネットワーク接続が最大になるためではないようです。そのため、Git オブジェクトを不必要に転送しているように思えます。

実際にファイルを転送せずにこれを行う方法についてアイデアを持っている人はいますか?

ありがとう!

4

4 に答える 4

1

興味深いことに、大きなファイルの内容は同じで (私は推測します)、両端で同じオブジェクト ファイルを作成する必要があるため、これはうまくいく可能性があります。

ローカル マシンの 2 つのリポジトリでテストを実行すると、異なるリポジトリの同じファイルが同じ SHA ID を持つことがわかります。

実際のファイルの SHA ID が両方のリポジトリで同一であるかどうかを確認してください。そうである場合は、とにかく転送される可能性がある理由を解明する必要があります。そうでない場合は、転送しない理由を見つけてください。

于 2010-01-24T14:46:38.337 に答える
1

コミットが同じである必要があります。ツリー ID が同じであっても、コミット ID が異なる場合があります。

私が今考えることができるのは、次のとおりです。

片側で(最初の)コミットを行います。そのハッシュに注意してください。フォルダー内のハッシュを見つけ.git/objects/ます。ファイルを他のPCにコピーします。他のPCに同じIDのツリーがある場合、それは機能するはずです

于 2010-01-24T21:42:19.223 に答える
0

私はスニーカーネットを使用しました (まあ、カルネット): ローカルのダウンストリーム git ツリーの 1 つを取得し、すべてを DVD に書き込みます。リモート側で、DVD をディスクにコピーします。次に、必要に応じて、.git/config の [remote "origin"] 構成セクションを編集して、リポジトリが引き続きその上流に到達できるようにします。

于 2010-01-24T16:32:19.863 に答える
0

git または Http のどのプロトコルを使用していますか?

http プロトコルを使用すると、 Git が遅くなります。唯一のオプションが http で、DVCS が必要な場合は、Mercurialを試すことができます。

2 つのリモート フォルダーを同期するだけでよい場合は、Beyond Compareを参照してください。

于 2010-01-24T21:25:00.403 に答える