突然Git Pushができなくなった時の一つの解
それはある日突然訪れた。
取引先と共有しているBitBucket上のリモートリポジトリに、ローカルでコミットしたソースコードがPushできなくなった。ソースコードはSails.jsサーバ上で組んでいるもので、クライアントはReactを使用してビルドしたものだ。
Sails.js | Realtime MVC Framework for Node.js
React – ユーザインターフェース構築のための JavaScript ライブラリ
これまで問題なく使えていたのだが、ある日突然次のようなログに見舞われPushできなくなった。
Enumerating objects: 47, done. Counting objects: 100% (47/47), done. Delta compression using up to 12 threads Compressing objects: 100% (29/29), done. fatal: the remote end hung up unexpectedly Connection to bitbucket.org closed by remote host. fatal: the remote end hung up unexpectedly
少量の変更なら問題なく使えたので、どう切り分ければいいのか皆目見当が付かない。
主眼を「大量データのPush」に絞り、 git push fatal hung up
のようなキーワードでググり、.git/config上で ssh.postBuffer
をいじってみたり、~/.ssh/config上に ServerAliveInterval
を設定してみたりと手を尽くしたものの、一切変化がなかった。
もしやBitBucket特有のものかと思っていたら、別の取引先でGitHub上に共有していたソースコードも同様のログとともにPushできない事象に見舞われた。OMG
実は問題なく使えていた時と、問題が発生した時の環境で唯一違いがあった。それは「引越し」をしたことだ。プロバイダや回線は全く一緒なのだが、引っ越したことでネットワーク環境に何らかの差異が発生したのではと思った。
そこで自宅のLAN環境を無効にして、モバイルWi-Fiルーターで試してみた。が、問題は解決しなかった。なんやねん!
目の前が真っ暗になりかけたその時、検索画面に次の記事の検索結果が引っかかった。
根本的な解決方法ではなさそうなものの、見出しが気になりリンクをたどると、内容は「ssh接続をhttpsポート(443)でつなぐ」というものだった。なるほど、22番以外でも接続することはできるのかと思い、失敗していたGitHub.comへの接続設定に適用してみた。
「こいつ・・・動くぞ!」
なんとこれまでウンともスンともPushできなかったコミットが、さらっと completed
のメッセージとともにPushを完了した。そこで問題のBitbucketの方もやってみたところ、こちらも問題解決!見事に突破した。
22番ポートの何がダメになってしまったのか、そもそもの話はまるでわからないままだが、443番ポートを介することで、できなかったことができたことに違いはない。
参考にしたサイトに謝意を述べるとともに、リンクを掲載しておく。もし postBuffer
や ServerAliveInterval
などで一切解決できなかった方はお試しあれ。
BitbucketにHTTPSポートでSSH接続する方法 – Memoteki
22 番ポートが通らない環境で GitHub / BitBucket / GitLab を SSH 経由で利用する方法 - Qiita