如何设置git push和git pull的超时时间?
不知道为什么,最近从 github 上git push 和 git pull 的时候总是不太稳定,有时候 pull 了半天都拉不下来,然后中断后重试一次又很顺畅了。
所以我想主动设置git push 和 git pull 的超时时间,这样我可以在脚本中监测退出状态后自动进行重试,而不是死等。
目前来看,似乎 git
并没有一个配置项是能保证超过一段时间后一定终止退出的,只能通过 timeout
命令才能保证超时退出。
然而很多 UNIX 系统没有 timeout
命令怎么办呢?我目前只找到两个近似的解决方案,希望各位大神能提供其他的解决方法。
首先,通过 man git-config
我们可以发现 http.lowSpeedLimit
和 http.lowSpeedTime
这两个选项是近似满足要求的:
http.lowSpeedLimit, http.lowSpeedTime If the HTTP transfer speed is less than http.lowSpeedLimit for longer than http.lowSpeedTime seconds, the transfer is aborted. Can be overridden by the GIT_HTTP_LOW_SPEED_LIMIT and GIT_HTTP_LOW_SPEED_TIME environment variables.
然而这两个选项只针对 HTTP 协议生效,其他协议则需要另辟蹊径。
另一方面,既然 git 的低层是使用 ssh 协议,那么其实我们可以通过通过配置 ssh_config
的 ConnectTimeout
来设置连接服务器的超时时间。
但这个选项只针对连接服务器这个阶段生效(即创建连接,SSH 握手和密钥交换这三个阶段),之后就无法进行超时约束了。