Q. git pushすると400エラーが発生する
大きなファイルをpushしようとすると、http.postBufferの制限に引っかかり400エラーが発生する場合がある。
Table of Contents
エラーが発生する状況
プッシュを行うと次のようなエラーが発生する状況だった。
$ git push origin
error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
直近のコミットを確認すると、サイズが非常に大きなファイルが含まれていたため、Gitのデフォルトの制限に引っかかったのだろうと推測できる。
解決案 1. http.postBufferを設定する
http.postBuffer
を変更することで、大きなファイルでもpushできるようになる。
現在の値は次のコマンドで確認できる。何も表示されなければデフォルト値の1Mが適用されている。
git config --get http.postBuffer
これを適当な値に変更すればいい。
git config http.postBuffer 2M
調べていると、--global
オプションを付けて設定しないと上手くいかなかったという報告が見られるが、今回問題が発生した方の環境では問題がなかった。
git config --global http.postBuffer 2M
解決案 2. ファイルを圧縮する
ファイルを圧縮して問題ないのであれば、圧縮するのも一つの手段だと思われる。
あまりにも大きなファイルが多いとgit cloneなどに時間がかかるようになるため、適切なファイルサイズに抑えることは望ましい。
解決案 3. Git LFSを利用する
Git LFSは、実際のファイルではなくファイルへの参照を保存することで大きなファイルを扱うGitの拡張のようなシステム。
GithubでもGit LFSは利用できる。
Git LFSの使い方は公式サイトが詳しい。