web-dev-qa-db-ja.com

複数のスレッドでgit cloneを高速化する方法は?

私のgithubへのインターネット速度は決して高速ではなく、50kb/sで長続きします(私のインターネット速度は20mbitで、あまり高速ではありませんが、これよりはるかに高速です)。私の推定では、リポジトリはマルチGBなので、非常に時間がかかります。

Gitは multiple-threads を使用したオブジェクトのダウンロードをサポートしているので、インターネット速度を最大にできますか?

30
simonzack

浅いクローンを使用して、少なくとも問題を軽減することができます(すべての履歴をクローンしないことを意味します)。

git clone --depth 1 <repository>

Is git clone --depth 1(浅いクローン)よりも役に立つ? "。

注:Git 2.5(2015年第2四半期)では、単一のフェッチコミットもサポートされています!「 リモートgitリポジトリから特定のコミットをプル 」を参照してください。

51
VonC

git config --global http.postBuffer 524288000

2
WHS

git clone --jobs

これは、複数のサブモジュールがある場合に役立ちます。

-j <n>--jobs <n>

同時にフェッチされたサブモジュールの数。デフォルトはsubmodule.fetchJobsオプション。

V2.9.0(2016年3月)の commit 72290d6 に追加:

clone:並列サブモジュールのクローンに明示的な引数を許可します

単一のサーバーに2つのモジュールがある場合、これが役立つかどうか疑問に思います。 GitHubのTODOベンチマーク。

異なるサーバーからのサブモジュールがある場合は間違いなく必要です。

Gitは、すべてのジョブを単一のサーバーにランダムに一度に配置するのではなく、特定の時間に可能な限り異なるサーバーから可能な限りフェッチするのに十分賢いのではないかと思います。

Windowsでも同様の動作が見られましたが、その原因は非常に攻撃的に設定されたWindowsアンチウイルスであり、gitは多くの小さなファイルを転送していました。 Linuxのデュアルブートにより、gitクローンの速度が最高になりました。

仕様がある場合は、仮想Windowsをゼロからインストールし、必要なgitソフトウェアのみを追加するテストWindowsインストール(VirtualBoxまたはvmwareプレーヤーを仮想的に使用するなど)の作成を検討してください。その後、問題がgitの「内部」か「外部」かを確認できます。私の個人的な推測では、これは速いでしょう。