以下の内容はhttps://tech.guitarrapc.com/entry/2014/03/23/102906より取得しました。


git で error: Connection time-out while accessing https://github.com/Account/RepositoryName.git と出た時の対処

最近GitHubへのDDoSが頻発しており、それに伴いPullやCloneを含めてgit remote show originなどでremote状態の取得できないことがあります。

で、特に以下にある3/22における影響では、アジアパシフィックからのパケットロストが報告されていました。

  • 1:04 UTCAs a result of our ongoing DDoS mitigation, we're experiencing high rates of packet loss from users in the Asia-Pacific region. We're working on reducing this disruption to service and will provide additional information when it becomes available

image

今回は、経過とどう対応したかを。

経過

3分置きに定期的にgit pullをする環境があります。GitHubがDDoSを受けると、顕著に影響がでるのでその時間経過を見てみましょう。

時刻(JST) 状態 Error/GitHub表示
2014/3/22 4:49 エラー発生開始 exit code 1 for pulling "RepositoryName".
error: Connection time-out while accessing https://github.com/"Account"/"RepositoryName".git/info/refs?service=git-upload-pack
fatal: HTTP request failed
2014/3/22 07:22 一時的にエラーなくpull 2014/03/22 7:44:12 : Pulling Repository 'Repository Name'
Already up-to-date.
2014/3/22 10:04 GitHub Status GitHub Statusでパケットロストしてるユーザーがいるよ。と表示
2014/3/22 11:20 エラー継続 httpsではエラーがでるものの、sshではエラー出ずに完了
2014/3/22 12:30 エラー解消 httpsでもエラー出ずに完了
2014/3/22 12:35 GitHub Status 解消GitHub Statusで治ったよ。と表示

対処

今回のでは、httpsを使っていたのですが、GitHub Status更新前の8:00で次の状態でした。

  • httpsでのGitコマンドが一切合財どのRepositoryでもはじかれてる
- Connection time-out
- Authentication failed
- git remote で結果返さず停止
- error: RPC failed; result=22, HTTP code = 411
- 他
  • httpsでのerror: RPC failed; result=22, HTTP code = 411の対処としてbufferを512MBにしてもだめ
$ git config http.postBuffer 524288000

あるいは.gitconfigに追記します。

[http]
  postBuffer = 524288000
  • httpsからGit(ssh) に切り変えるとgit clonegit pullがと時々できるようになる
  • 容量の大きいRepositoryでは引き続きtimeoutが発生する

11:20にsshを使ってGitHub Statusの連絡前に改善を確認。ただしhttpsではConnection time-outが引き続き発生している。

https と ssh の注意

状況に応じて選べばいいでしょう。

ssh と https では 圧倒的に https が早い

同じリポジトリに対しても、 Git(ssh) とhttpsでは速度が違います。

処理 転送速度
ssh 200 KiB/s
https 7.87 MiB/s

https では GitCredential が飛ぶ場合がある

httpsの場合は、 user / passを使うのですが、Windowsでは認証マネージャー のGit:https://github.comを使います。

Windowsの認証マネージャーですが、GitHubとの通信がConnection time-outなどを起こした時に、クレデンシャル自体消える場合があります。

この場合、以前紹介したPowerShell で Windows の 資格情報マネージャー を利用する (Jenkins などでの Git Credentialなど)で自動化しておくといいでしょう。

PowerShell からの Git コマンドで ssh は注意

まぁ普通なんですが、 必ずssh-agentからのssh-add が必要ですよ。っていう。

Source Treeとかでターミナル開いてやると、Source Treeで設定したsshキーが自動的にセットされるので意識されないんですが、 PowerShellで自動化するときはやってね! っていう。

これはLinuxでも一緒なのでいわずと知れてますよね。

まとめ

httpsだとエラーがでてもsshではうまく行く場合が多くあります。

容量が小さいRepositoryではsshが認証を意識することがない上、障害時にうまくいくことが多いようです。 が、容量が大きい場合、 sshではそもそも完了まで相当かかったりするため、 httpsしか選択肢が実質ないことも。この場合、GitHub Statusの状態に大きく左右されるので大変ですね。待つしかないのか....!




以上の内容はhttps://tech.guitarrapc.com/entry/2014/03/23/102906より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14