🙄

git push ができないぞ

2021/06/27に公開

ある日、いつものように push をしたところ以下のメッセージが。

Enumerating objects: 205, done.
Counting objects: 100% (205/205), done.
Delta compression using up to 8 threads
Compressing objects: 100% (67/67), done.
Writing objects: 100% (70/70), 666.08 KiB | 1.71 MiB/s, done.
Total 70 (delta 60), reused 0 (delta 0), pack-reused 0
send-pack: unexpected disconnect while reading sideband packet
fatal: the remote end hung up unexpectedly
Connection to github.com closed by remote host.

・・・🤔?

エラーメッセージを見る限り、
何らかの問題で接続が切断されているよう🧐

原因

大量の差分があるファイルが含まれていた

背景

今回の変更は、テスト用のCSVファイルの修正で、
CSVのカラムを増やすという変更でした。

テストの内容としては、ファイルアップロード時に
CSVで許容する行の上限についてテストを書いていました。

今回は10万行までは許容する仕様だったため、
テスト用のCSVの行は10万1行ありました。

このテストケースに直接は関係しませんが、
必要なカラムが不足してしまうとテストが失敗してしまうため
このCSVファイルにもカラムを追加する変更を加えなければなりません。

カラムを追加するということは、10万1行すべてに変更が加わります。
そのため、このファイルでかなりの数の差分が発生し、
それが原因で接続がエラーになり push  が失敗していたようです。

解決した方法

技術的な解決ではありませんが、
テストケースを見直し、そもそもこのテストケースは必要ではない
という結論に至ったため、当該のテストを削除しました。

これで大量の差分はなくなり、 push できました。

調査のためにやったこと

バッファサイズを増やす

ポストするバッファを増やしてみました(以下だとバッファを10Mにしています)

git config --global http.postBuffer 10M

10M、20M・・・ と最終的に 300M までやってみましたが、状況変わらず。

ブランチを切り替えてみる

新しいブランチをきって、そのブランチで該当のコミットを cherry-pick し、
同じように push してみましたがこれもダメ。

ブランチを切り替えて適当な変更が push できるか調べる

そもそも、push そのものができないのでは?と思い
新しいブランチをきって適当な変更をコミットし、push しました。
これは当然できます。(当時の私はより謎が深まり ?🤔? でした)

さいごに

このようなエラーが出て push ができない!というときには、
コミットに大量の差分があるファイルがないか確認してみましょう。

Discussion