web-dev-qa-db-ja.com

Gitのフェッチ/プル/クローンが受信オブジェクトでハングする

Gitリポジトリからフェッチまたはプルするとき、またはリポジトリを複製するとき、私はこのポイントに到達します:

remote: Counting objects: 6666, done.
remote: Compressing objects: 100% (5941/5941), done.
Receiving objects:  23% (1534/6460), 11.68 MiB | 23 KiB/s  

そしてハングします。 23%/オブジェクトの数は指定されていません。1桁から60年代までの範囲にあるようです。また、リストされているダウンロードの速度がフリーズします。ゼロに向かってゆっくりとクロールするわけではありません。

隣に座っている人には問題がないので、ルーターの問題ではありません。私たちは作業リポジトリにbeanstalkを使用していますが、beanstalkとgithubに問題があります(ときどき、githubが終了するようです)。

この問題は、Mountain LionにアップグレードしてXcodeを更新してから発生したようです。 git(XCodeを含む)を消去し、homebrewでインストールしてみました。それはうまくいかなかったので、私はそれを削除し、提供されたMacインストールパッケージで試してみましたが、これも問題を修正しませんでした。

Beanstalkはgitリポジトリ用のSSH URLを提供しますが、SCPまたはSSHを介して作業したサーバーに接続することに問題はありませんでした。

これは私のワークフローを殺しているので、どんな助けも大歓迎です!

42
gabeb

VMware on [〜#〜] nat [〜#〜]はこの問題を抱えていました。 ブリッジ(状態を複製)に変更すると、問題が修正されました。

20
Anand Rockzz

ネットワーク接続を確認してください。ルーティングテーブルにゴミが含まれている可能性があります。ルーターのポートが壊れているか、コンピューターのネットワークインターフェイスに問題がある可能性があります。 gitリポジトリのクローンを作成するサーバーにpingを実行してください。コンピューターとこのサーバー間のリンクが不安定である可能性があります。

8
cjayho

私の問題に似ています。 Gitは、一定の短い時間の後、フェッチまたはプッシュでハングしたようです。 ~/.ssh/config

Host *

ServerAliveInterval 60

私もマウンテンライオンとMBPを持っています。このタイムアウトが問題の原因であることを願っています。 (30分か40分かそこらで、それが続いていることに気づきました。)

7
driek

Macでは、Git 2.22(2019年第2四半期)で、この種の問題に対するgit fetchの耐性が向上するはずです。「git fetch」がSIGPIPE(OSXなど)で強制終了されるプラットフォームでは、他方で実行される_upload-pack_エラーを検出した後に電話が切れると、「_git fetch_」が信号で死ぬ可能性があり、それがフレークテストにつながりました。
"_git fetch_"は、操作のネットワーク部分でSIGPIPEを無視するようになりました(write(2)sからの戻りステータスを確認するため、これは問題ではありません)。

commit 1435889 (2019年3月3日)、および commit 37c8001 (2019年3月5日) Jeff King(peff を参照してください。
C浜野順夫-gitster- in commit 27cdbdd 、2019年3月20日)

fetch:ネットワーク操作中はSIGPIPEを無視します

デフォルトのSIGPIPE動作は、大量の出力を生成するコマンドに役立ちます。出力の受信者がなくなると、(通常はプログラムを強制終了することで)生成を停止するように非同期で通知されます。

しかし、主にデータの受信とディスクへの書き込みに関係するfetchのようなコマンドの場合、予期しないSIGPIPEが厄介になる可能性があります。すでにすべてのwrite()呼び出しの戻り値をチェックしており、シグナルのために死ぬことでエラーを適切に処理する機会がなくなります。

Linuxでは、一般にフェッチ中にSIGPIPEはまったく表示されません。ネットワーク接続の反対側が電話を切ると、ECONNRESETが表示されます。
しかし、OS XではSIGPIPEを取得し、プロセスは強制終了されます。

フェッチのネットワーク部分ではSIGPIPEを無視します。これにより、write()EPIPEを返し、プラットフォーム間で一貫した動作が得られます。

2
VonC