Git クローンに失敗する - fatal: The remote end hung up unexpectedly. fatal: early EOF fatal: index-pack failed
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
問題
クローンまたはフェッチの最中に Git が次のエラーで失敗する。
例 1
git clone http://bitbucket.company.com:7990/scm/proj/repo.git
fatal: early EOF
fatal: The remote end hung up unexpectedly
fatal: index-pack failed
error: RPC failed; result=56, HTTP code = 200
Completed with errors, see above.
例 2
1 GB の経過後に git clone に失敗する。
git clone http://bitbucket.company.com:7990/scm/proj/repo.git. Cloning into 'repo'....git
remote: Counting objects: , done.
remote: Compressing objects: 100% (####/###), done.
fatal: The remote end hung up unexpectedly.00 GiB | MiB/s
fatal: early EOF
fatal: index-pack failed
atlassian-bitbucket.log
では次のようになっている。
2017-07-26 12:39:18,819 INFO [http-nio-7990-exec-8] <user> @4MMSRUx758x33193x0 <IP> "POST /scm/team/<repo>/git-upload-pack HTTP/1.0" c.a.s.i.w.filters.StreamGuardFilter The remote client has aborted the connection
診断
この挙動は通常、中間に存在する要素によってリクエストが終了されていることに関連します。中間要素を取り除いてインポートが動作するかどうかを確認することで、トラブルシューティングを迅速に行えます。
これを行うには、ファイアウォールやアンチウイルス ソフトウェアを一時的に無効化してクローンを再試行するか、ファイアウォール設定に例外ルールを追加します。
Git のデバッグ ログを有効化するには、コマンド ラインを利用したプッシュを行う前に個々の OS で次のような作業を行います。
Linux の場合
Git コマンドを実行する前に、コマンド ラインで以下を実行します。
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
Windows の場合
Git コマンドを実行する前に、コマンド ラインで以下を実行します。
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1
原因
考えられる原因には次のものが考えられます。
- 原因 #1 git のデバッグ出力に
error: RPC failed; result=56, HTTP code = 200
が含まれる
エラー コード 56 はCURLE_RECV_ERROR
のcurl
受け取りエラーを意味します。つまり、クローン プロセス中にデータの受け取りを妨げる何らかの問題が発生しています。これは一般に、ネットワーク設定、ファイアウォール、VPN クライアント、アンチウイルス ソフトウェアにより、すべてのデータが転送される前にコネクションが終了されるために発生します。 原因 #2 エラー コードが存在せず、git のデバッグ ログには Nginx がリバース プロキシとして構成されている旨が表示されている。Git クローンが 1 GB の処理後に失敗する。
例:< HTTP/1.1 200 < Server: nginx/1.10.2
回避策
原因 1 の回避策: クローンの処理方法として SSH を利用するように切り替えます。
原因 2 の回避策: プロキシをバイパスしてクローンします。参考: 「Bitbucket Server でプロキシをバイパスする方法」
ソリューション
- 原因 1 の解決策:
アンチウイルス設定、ファイアウォール設定、または VPN クライアントの設定を変更し、Bitbucket Server からのコネクションを許可してそれらを早期に終了しないようにします。必要な変更内容は環境ごとに利用されているテクノロジーに応じます。必要に応じてベンダーのドキュメントをご確認ください。 - 原因 #2 の解決策:
Nginx の proxy_max_temp_file_size におけるデフォルトの 1 GB 制限を無効化します。これを無効化するには値をゼロとして設定する必要があります。
詳細については次のページをご確認ください。http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size