2012年6月15日金曜日

git pushでHTTP 411エラーが出たときの対処法

git push をおこなったとき、サーバーから HTTP ステータスコード 411 が返され、失敗してしまうことがある。

[図1] TortoiseGit でのエラー表示例

[図2] Eclipse でのエラー表示例

HTTP ステータスコード 411 の定義には「The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.」と書かれている。つまり、このステータスコードは、クライアントの HTTP リクエストに Content-Length ヘッダーが付いていないことを理由としてサーバーがリクエストを拒否する場合に返されるのであるが、git push のときにこのステータスコードが返される原因は、push しようとしているデータ量が多過ぎることにある。


この問題の対処法は、git の設定値 http.postBuffer の値を大きくすることである。例えばこの値を 100MB (100 * 1024 * 1024 = 104857600) にするには、コマンドラインでは次のように打ち込む。

git config http.postBuffer 104857600

TortoiseGit の GUIでおこなうには、エクスプローラのコンテキストメニューから、TortoiseGit → Settings で TortoiseGit の設定ダイアログを表示し、Git → Config → Edit local git/config で設定ファイルを開き、http.postBuffer に関する設定を追記する。

[http]
  postBuffer = 104857600

[図3] git 設定ファイルに http.postBuffer を追記