📑
Git Push 時のエラー `RPC failed; HTTP 400` の原因と対処法
エラー内容
% git push
Enumerating objects: 28, done.
Counting objects: 100% (28/28), done.
Delta compression using up to 8 threads
Compressing objects: 100% (22/22), done.
error: RPC failed; HTTP 400 curl 22 The requested URL returned error: 400
send-pack: unexpected disconnect while reading sideband packet
Writing objects: 100% (26/26), 38.81 MiB | 30.50 MiB/s, done.
Total 26 (delta 0), reused 0 (delta 0), pack-reused 0
fatal: the remote end hung up unexpectedly
Everything up-to-date
原因
Git の push 操作中に RPC failed; HTTP 400
が発生し、リモートリポジトリへのデータ送信が中断されたというエラーです。
考えられる主な原因:
1️⃣ プッシュするデータサイズが大きい
📌 原因:
- GitHub では 1 ファイルの最大サイズが 100MB、リポジトリ全体の制限は 1GB(プッシュ時は 500MB 超えると警告)。
- GitLab などでも同様の制限があり、それを超えるとプッシュが拒否される。
📌 解決策:
-
.gitignore
に大きすぎるファイルを追加してプッシュ対象から除外する。 - Git LFS(Large File Storage)を利用して大きなファイルを管理する。
2️⃣ HTTP リクエストのバッファサイズが小さい
📌 原因:
-
http.postBuffer
は、Git が HTTP 経由でリモートリポジトリにデータを送る際の「1 回のデータ送信バッファサイズ」。 - 初期設定は 1MB (
1048576
バイト) なので、大きなリポジトリをプッシュするとバッファが足りずに送信失敗することがある。
📌 解決策:
Git の http.postBuffer
の値を増やす
① は「リモートリポジトリ側の制限」
② は「ローカルの Git 設定の制限」
という違いです。
対処法
今回のケースでは、2 の http.postBuffer のサイズを増やすことで解決しました。
git config --global http.postBuffer 524288000
このコマンドは、Git の HTTP リクエストのバッファサイズを 500MB (524288000 バイト) に設定します。これにより、大きなデータのプッシュ時にもエラーが発生しにくくなります。
以上です。
Discussion