如何设置git push和git pull的超时时间?

本文探讨了在使用Git过程中遇到的不稳定情况,特别是在从GitHub进行git push和git pull操作时。作者介绍了两种设置超时时间的方法:一是通过http.lowSpeedLimit和http.lowSpeedTime配置项,适用于HTTP协议;二是通过ssh_config的ConnectTimeout设置,用于SSH协议的连接阶段。这些技巧有助于提高脚本的健壮性和用户体验。

原文地址:https://www.lujun9972.win/blog/2020/06/03/如何设置git-push和git-pull的超时时间?/index.html

不知道为什么,最近从 github 上git push 和 git pull 的时候总是不太稳定,有时候 pull 了半天都拉不下来,然后中断后重试一次又很顺畅了。

所以我想主动设置git push 和 git pull 的超时时间,这样我可以在脚本中监测退出状态后自动进行重试,而不是死等。

目前来看,似乎 git 并没有一个配置项是能保证超过一段时间后一定终止退出的,只能通过 timeout 命令才能保证超时退出。

然而很多 UNIX 系统没有 timeout 命令怎么办呢?我目前只找到两个近似的解决方案,希望各位大神能提供其他的解决方法。

首先,通过 man git-config 我们可以发现 http.lowSpeedLimithttp.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_configConnectTimeout 来设置连接服务器的超时时间。 但这个选项只针对连接服务器这个阶段生效(即创建连接,SSH 握手和密钥交换这三个阶段),之后就无法进行超时约束了。

`git push -u test master:master` 是一个Git命令,以下是对该命令的详细解释: ### 命令各部分含义 - `git push`:这是Git中用于将本地仓库的提交推送到远程仓库的基本命令。 - `-u`:即 `--set-upstream`,该参数的作用是为推送的本地分支与远程分支之间建立关联。建立关联后,后续使用 `git push` 或 `git pull` 时,若不指定远程分支本地分支,Git 会知道默认要操作的远程分支本地分支。官方解释为 “For every branch that is up to date or successfully pushed, add upstream (tracking) reference, used by argument - less git - pull(1) and other commands” [^2]。 - `test`:代表远程主机名,它是你在本地仓库中为远程仓库设置的一个别名。当执行 `git remote add` 命令时,可以为远程仓库指定一个名称,这里的 `test` 就是这个名称。 - `master:master`:冒号前的 `master` 是本地分支名,表示要推送的本地分支为 `master`;冒号后的 `master` 是远程分支名,表示要将本地的 `master` 分支推送到远程主机 `test` 上的 `master` 分支。 ### 使用场景 该命令适用于首次将本地的 `master` 分支推送到远程主机 `test` 的 `master` 分支,并且希望建立本地 `master` 分支与远程 `master` 分支的关联。之后,在本地 `master` 分支进行后续提交后,直接使用 `git push` 命令,Git 就会自动将本地 `master` 分支的提交推送到远程主机 `test` 的 `master` 分支。 ### 可能遇到的问题及解决办法 1. **权限问题**:可能会出现类似 “Auth error: DeployKey does not support push code” 或 “Could not read from remote repository. Please make sure you have the correct access rights and the repository exists” 的错误。这通常是由于没有足够的权限向远程仓库推送代码。解决办法是检查远程仓库的访问权限,确保部署密钥或账号密码等配置正确。 2. **远程主机名不存在**:若出现 “fatal: 'test' does not appear to be a git repository” 错误,说明本地仓库中没有名为 `test` 的远程主机。需要使用 `git remote add test <远程仓库地址>` 命令添加远程主机。 3. **网络问题**:在推送过程中,可能会遇到网络连接超时或中断的情况,例如执行 `git push --set - upstream origin master` 时超时失败。可以尝试将本地仓库的URL配置从Git格式修改为HTTPS格式。在本地仓库目录执行 `git config --local -e` 命令,将 `url` 配置项从 `git@git.acwing.com:username/xx.git` 修改为 `https://git.acwing.com/username/xx.git`,然后再执行推送命令,并输入账号密码。也可以直接修改为 `https://username:passwd@git.acwing.com/username/xx.git`,这样就不用每次推送都重新输入账号密码 [^4]。 4. **分支冲突**:当远程分支本地分支有冲突时,推送会失败。可以先使用 `git pull --rebase origin master` 命令将远程分支的更新合并到本地分支,解决冲突后再进行推送 [^3]。 ### 示例代码 ```bash # 首次推送并建立关联 git push -u test master:master # 后续提交后直接推送 git push ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值