web-dev-qa-db-ja.com

不安定な接続で大きなプロジェクトのgitクローンを完了する方法は?

LibreOfficeコードベースをgit cloneしようとしていますが、現時点では約300kbpsのインターネット接続があり、安定しているとは言えません。接続はいつでも元に戻すことができますが、git cloneプロセスはすでに動作を停止しており、再び実行する方法はありません。より障害に強いgitクローンをダウンロードする方法はありますか?

私が考えたオプションの1つは、他の誰かの.gitディレクトリをダウンロードすることですが、それは他の人に過度に依存しており、私にとって最良の解決策ではないようです。

175
LaPingvino

これはまだ準備ができていないと思います。 古いGSoCページ があります。これは、目的の機能を実装する予定でした。あなたがそれをディレクトリとしてダウンロードすることを提案したように、私の最善の策はです。他のプロトコルでダウンロードを再開できると思います。

再起動可能なクローン

大きなリポジトリ(KDE、Open Office、Linuxカーネルなど)のクローンを作成する場合、現在、中断されたクローンを再起動する方法はありません。小さなパイプの端にいるユーザーがデータをダウンロードするにはかなりの時間がかかる場合があり、クローンが途中で中断された場合、ユーザーは現在最初からやり直して再試行する必要があります。一部のユーザーにとって、これは大きなリポジトリのクローンを作成することを不可能にするかもしれません。

目標:git-cloneが以前に失敗したダウンロードをネイティブgit://プロトコルで自動的に再開できるようにします。言語:Cメンター:ショーン・ピアース推奨:ショーン・ピアースon gmane


更新

他の回答の1つでの浅いクローン(git clone --depth=1)の提案に加えて、プロバイダーと通信できる場合は、誰かが裸のリポジトリを作成できると便利です。 convert ベアリポジトリを完全なリポジトリに簡単にできます。また、浅いクローンは必ずしも役立つとは限らないので、その回答のコメントも読んでください。

65
Jungle Hunter

頭に浮かぶ2つの解決策(または回避策):

  • shallow cloneすなわちgit clone --depth=1を使用し、次にdeepenこのクローンを使用しますgit fetch --depth=Nを使用し、Nを増やします。 git fetch --unshallow(1.8.0.3以降)を使用して、残りのすべてのリビジョンをダウンロードできます。

  • 誰かにタグ付きリリースまでbundleに依頼してください( git-bundle(1) manpageを参照)。バンドル自体は通常のファイルであり、再開サポート付きのHTTP/FTP、BitTorrent、rsyncなどを介して、任意の方法でダウンロードできます。バンドルからクローンを作成し、構成を修正し、公式のLibreOfficeリポジトリからさらにフェッチできます。

113
Jakub Narębski

この方法では、サードパーティのサーバーを使用します。

最初にgit clone --bareを実行し、次にrsync -v -P -e ssh user@Host:repo.git .を実行します。Windowsでmsysを使用できます。

13
Rafal Rusin

「他の誰かの.gitディレクトリをダウンロードする」ことができますが、その誰かが公式リポジトリそのものです。 LibreOfficeリポジトリはhttp経由で利用できます。たとえば、build.githttp://anongit.freedesktop.org/git/libreoffice/build.git/ にあります( http ://cgit.freedesktop.org/libreoffice/ 完全なリストの場合、http URLは各リポジトリのページの下部にあります)。

これらのhttp URLに表示されるのは、.gitディレクトリ(実際には.gitディレクトリにあるものだけを含む "裸の"リポジトリ)にすぎません。これは、git://プロトコル(git daemon)のサーバーが読み取るディレクトリと同じです。これらのディレクトリのコピーをWebダウンローダー(たとえばwget -m -np)で作成すると、コピーから複製でき、httpリポジトリから直接複製した場合と同様に機能します。

そのため、できることは、リポジトリごとに、お気に入りのWebダウンローダーでコピーを取得し(破損したダウンロードの再開に関するすべての問題を処理します)、そのコピーからクローンを作成します。更新する場合は、お気に入りのWebダウンローダーを再度使用してコピーを更新し、そのコピーからプルします。これで、お気に入りのWebダウンローダーと同じように、クローンとアップデートが接続不良に対して耐性があります。

9
CesarB

" ハトとSDカードの束の帯域幅を過小評価しないでください "は、この答えの最新の形式です。普通のcp -a itなんでも、それをtarして、いまいましいものをメールしてください。サムドライブをSASEに落とすのに2分の時間を費やすことをいとわない人を見つけます。連絡先を見つけてください、彼らはあなたのためにそれをするかもしれません。

8
jthill

git cloneをコンポーネント部分に分解し、git resetを使用してファイルの再ダウンロードを防止しましょう。

git cloneが実行されると、最初のいくつかのことは次と同等です。

git init
git remote add Origin <repo_url>
git fetch Origin <branch>

上記の手順を手動で実行し、それらが正しく完了したと仮定した場合、次の手順を必要な回数実行できるようになりました。

git checkout --force <branch>

実行するたびにすべてのファイルがチェックアウトされることに注意してください。ただし、ファイルを再ダウンロードする必要はありません。これにより、時間を大幅に節約できます。

5
cowlinator
git clone --depth <Number> <repository> --branch <branch name> --single-branch

このコマンドは私を助けます(おかげで Nicola Paolucci

例えば

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch
4
Ahed Eid

サードパーティのサーバーにアクセスできる場合は、そこにクローンを作成してからコピーできます。

4
Amber

この問題も私に噛みつきました。私の場合、回避策があります。場合によっては適用される場合と適用されない場合があります。

リモートシステムでgit操作を開始するために時々携帯電話を使用しています。もちろん私のwi-fiが壊れた場合、セッションは終了し、gitは回復せずにクローン操作全体をドロップします。しかし、リモートシステムからgitマスターへのインターネット接続は安定しているため、クローンを停止する必要はありません。必要なのは、ターミナルセッションからクローンを切り離す常識です。これは、screen/tmuxまたはNohup/daemonを使用して実行できます。私の場合、それはライブウェアの誤動作です。

3
Tony Sidaway

クローン/深さベースの回答に基づいて-数行のbashで簡単に実行できます...

git clone --depth=1 [email protected]:/var/git/whatever.git <directory> cd <directory> for m in `seq 1 100`;do git fetch --depth=$m;done

2
Stephen

CNTRL Zを使用して、クローニングを停止します。ターミナルを閉じないで、システム/ラップトップを休止状態にしてから、fgコマンドで後で続行します。レポfrm githubをクローンしようとしたときに、今日この同じ問題に直面していました。これは私にとって時間の節約になりました。

2
Jicksy John

ngitcachedgit-proxy などのgitプロキシを使用します。

1
Amr Mostafa

私のために働いた最高の回避策:

インターネット接続が悪いと同じ問題に直面しました。だから私は次の解決策を思いついた:

サーバー上に小さなphpファイルを作成して、パッケージをZipファイルとしてダウンロードしました。

<?php
$url = "https://codeload.github.com/CocoaPods/Specs/Zip/master";
file_put_contents("coco.Zip", fopen($url, 'r'));
?>  

<a href="coco.Zip">coco.Zip</a>

次に、履歴書をサポートするダウンロードマネージャーを使用してZipファイルをダウンロードします

0
Zorox

Hg-git拡張でMercurialを使用してみることができます。

それがうまくいかない場合は、git fetch <commit-id>を使用してリモートgitリポジトリの一部のみをフェッチできます(空のgitリポジトリにフェッチできます。クローンで作成する必要はありません)。ただし、この方法を使用する場合は、ブランチの構成を修正する(=ローカルおよびリモートの追跡ブランチを作成する)必要があります。

0
Rudi

ここに5セントを入れたいです。これは実際に私がこの問題を解決するのを助けたものです

  • 圧縮をオフにします
  • http.postBufferを増やす
  • 部分的なクローンを作成します
  • クローンディレクトリに移動して、クローンの残りを取得します
  • 残りを引っ張る
git config --global core.compression 0
git config --global https.postBuffer 524288000
git clone  <your_git_http_url_here> --depth 1
git fetch --unshallow 
git pull --all

これにより、8Mbps adsl接続で〜3GBのレポジトリを複製できました。もちろん、フェッチとプルを数回実行する必要がありましたが、それでも...

0
matson kepson

サーバーに適切な帯域幅がある(サーバーがある場合)と仮定した場合、別の答えは次のとおりです。

  1. サーバーサイドを使用して独自のサーバーを作成 Git Wrapper 's
  2. サーバーでクローンを作成します
  3. サーバー側を使用して圧縮する Zip Archiver 's
  4. サーバー側からダウンロードしてください サポートの再開

ただし、これは非常に基本的なWeb開発経験でのみ機能します;)また、サーバーにgit.exeが必要です

0
Top-Master

ここで同じ問題-私は本当に不安定なインターネット接続を持っていますが、多くの場合10-15 kb /秒以下です:-P

私にとっては、wgetの方法はとてもうまくいきました。緑色のボタン「クローンまたはダウンロード」があるリポジトリサイトに移動し、クリックしてZipダウンロードオプションのリンクをコピーします。

次に、wgetコマンドへのリンクを挿入します。
wget -c -m -np https://github.com/your/repository/archive/master.Zip

チャームのように動作します...

0
X-File