Git Push无法完成:排查方法、修复方案及信息收集求助
解决GitLab项目中git push卡住的问题
一、如何找出问题根源?
- 排查网络链路:
- 执行
ping <你的GitLab域名/IP>检查基础连通性,查看是否存在高丢包情况 - 执行
traceroute <你的GitLab域名/IP>(Linux/macOS)或tracert <你的GitLab域名/IP>(Windows),定位路由节点是否有阻塞
- 执行
- 验证Git远程配置:
- 执行
git remote -v确认远程仓库地址正确,协议(HTTPS/SSH)是否与授权方式匹配
- 执行
- 检查Git进程状态:
- 执行
ps aux | grep git(Linux/macOS)或打开任务管理器(Windows),查看是否存在僵死的Git推送进程
- 执行
- 排查大文件问题:
- 执行
git count-objects -vH查看本地仓库对象大小,确认是否有未被过滤的超大文件(如GB级日志、压缩包)
- 执行
- 查看Git执行轨迹:
- 执行
GIT_TRACE=1 git push获取推送过程的详细日志,定位卡住的具体阶段(如认证阶段、上传阶段)
- 执行
- 验证协议连通性:
- SSH协议:执行
ssh -T <你的GitLab SSH地址>(如git@gitlab.com),确认密钥认证正常 - HTTPS协议:执行
curl -v <你的GitLab仓库HTTPS地址>,确认HTTP请求能正常建立连接
- SSH协议:执行
二、如何修复该问题?
- 网络相关修复:
- 切换至稳定网络环境,或配置Git代理:
git config --global http.proxy http://proxy-addr:port(如需) - SSH协议:重新生成SSH密钥并添加至GitLab账户,确保密钥未过期、权限正确(Linux/macOS下密钥文件权限需设为600)
- 切换至稳定网络环境,或配置Git代理:
- 大文件处理:
- 使用
git filter-repo移除历史中的超大文件,将大文件路径添加至.gitignore - 启用Git LFS管理大文件,避免直接推送大文件至仓库
- 使用
- 进程与配置修复:
- 杀掉僵死的Git进程后重新执行推送
- 修正错误的远程仓库地址:
git remote set-url origin <正确的仓库地址>
- 版本与操作优化:
- 升级Git至最新稳定版,修复旧版本的兼容性bug
- 避免一次性推送大量变更,分目录执行
git add、分批次提交推送
三、需要收集哪些信息来协助排查?
- 本地Git版本:
git --version的输出结果 - 远程仓库配置:
git remote -v的完整输出 - 推送详细日志:
GIT_TRACE=1 git push执行后卡住前的所有输出内容 - 网络测试结果:
ping、traceroute/tracert、SSH/HTTPS连通性测试的输出 - 本地仓库状态:
git count-objects -vH的输出结果 - 操作系统信息:具体的OS版本(如Windows 11、Ubuntu 22.04)
- 问题触发规律:是否随机出现、是否在特定操作(如添加大文件)后必现、出现频率
内容的提问来源于stack exchange,提问作者Hu gePanic
相关产品推荐
相关产品推荐

