git push无进度更新卡住,如何获取推送的实际状态?
Git HTTP推送卡住无进度更新时查看实际状态的解决方案
该问题本质是Git HTTP模式默认会缓存大块上传内容,非交互场景下会自动关闭进度输出,加上之前推送失败残留的对象缓存会让初始进度直接跳到已上传过的比例,看起来就像无响应卡住。
可用的解决方案如下:
强制开启实时进度输出
推送时加上-v(verbose详细模式)和--progress(强制输出进度)参数,即使输出非终端交互场景也会实时打印进度:# 替换成自己的远程名和对应分支名即可 git push -v --progress <远程仓库名> <分支名>调整HTTP传输缓冲区避免假死
临时调小HTTP上传的缓冲区大小,避免Git缓存大量内容再一次性传输导致的长时间无输出:# 临时将单次HTTP推送缓冲区设为1M,仅对当前仓库生效 git config http.postBuffer 1048576后续要恢复默认配置执行:
git config --unset http.postBuffer开启底层传输日志查看实际运行状态
开启Git内置的跟踪日志和Curl传输日志,可以看到完整的网络交互、上传字节数、服务端响应,直接判断是真的在传输还是已经网络断开:# Linux/Mac 环境执行 GIT_CURL_VERBOSE=1 GIT_TRACE=1 git push -v --progress <远程仓库名> <分支名> # Windows PowerShell 环境执行 $env:GIT_CURL_VERBOSE=1 $env:GIT_TRACE=1 git push -v --progress <远程仓库名> <分支名>清理残留缓存再推送
如果是之前推送失败的残留缓存导致进度跳变,先清理本地无效缓存对象再重新推送:git gc --prune=now
内容的提问来源于stack exchange,提问作者Sebi
相关产品推荐
相关产品推荐

