IT

Git push で HTTP 400 エラー?http.postBuffer の調整で解決しよう!

最近遭遇した Git のトラブルとその解決方法について共有したいと思います。

この記事は1MB以上の容量を持つファイルををプッシュしようとした時に、突然 HTTP 400 エラーに遭遇した人に捧げます。

そんな時の救世主となるのが、`http.postBuffer`の設定です。

問題の症状

Git push を実行すると、以下のようなエラーメッセージが表示されました:

numerating objects: 50, done.
Counting objects: 100% (50/50), done.
Delta compression using up to 10 threads
Compressing objects: 100% (30/30), 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% (30/30), 10.98 MiB | 7.94 MiB/s, done.
Total 30 (delta 11), reused 0 (delta 0), pack-reused 0 (from 0)
fatal: the remote end hung up unexpectedly
Everything up-to-date

どこを注目するべきか?

以下の容量に関するセクションです。

Writing objects: 100% (30/30), 10.98 MiB | 7.94 MiB/s, done.

なぜここに注力するべきなのか?

GitHub は 100 MiB を超えるファイルをブロックします。と公式に記載がありますが、これはGithub側が弾くことを示しています。

「それじゃ、関連はないじゃないか?」と思われるかもしれませんが、ローカルのGitに設定が影響しています。

デフォルトのgit configには上限が1MBまでとなっています。

故に上記の制限のためにPushがこけてしまうというオチでした。

解決方法

設定を緩和するコマンドを叩く

以下で20MBまでを上限にできます。

git config http.postBuffer 20971520

上記のコマンドだとPC自体のこの設定が適用されます。実行しているディレクトリだけにしたい場合には以下です。

git config --local http.postBuffer 20971520

20MB = 20 * 1024 * 1024 バイト = 20,971,520 バイト

このコマンドを実行後、無事にプッシュすることができました。

  • 注意点

必要以上に大きな値を設定すると、メモリ使用量が増加する可能性があるので注意が必要です。

他の対策

公式のドキュメントに記載があるようにGit LFS を利用する。

Git LFSとは?

Git LFSは、大きなファイル(例:画像、音声、データセットなど)の参照をGitリポジトリに保存し、実際のファイル内容は別のサーバーに保存します。これにより、リポジトリのサイズを小さく保ちつつ、大容量ファイルを扱うことができます。

Git LFSの主な利点

  1. リポジトリのサイズ削減:大きなファイルの内容がリポジトリから分離されるため、全体のサイズが小さくなります。
  2. クローンとフェッチの高速化:必要なファイルのみをダウンロードするため、操作が速くなります。
  3. 効率的なバージョン管理:大容量ファイルの変更を効率的に追跡できます。

まとめ

自身の環境を疑え!というのが学びですね。

以上、どなたかのお役に立てば幸いです。

  • この記事を書いた人

緑川縁

ニートからシステムエンジニアになった人
クラウド案件をメインにやっています。
保持資格:CCNA,AWS SAA&SAP,秘書検定2級
趣味でボカロ曲作り始めました。

-IT
-