Git远程推送失败:远端意外挂断,配置参数仍无效求助
Git Push 报错(Write failed: Broken pipe)排查思路
报错信息
Compressing objects: 100% (3749063/3749063), done.
Writing objects: 0% (1/23640040)
Write failed: Broken pipe
fatal: the remote end hung up unexpectedly
fatal: the remote end hung up unexpectedly
已尝试的全局配置
git config --global core.compression 0 git config --global core.packedGitLimit 512m git config --global core.packedGitWindowSize 512m git config --global ssh.postBuffer 52428800 git config --global http.postBuffer 52428800 git config --global pack.deltaCacheSize 2047m git config --global pack.packSizeLimit 2047m git config --global pack.windowMemory 2047m
问题分析与解决思路
1. 网络层面原因
- SSH连接稳定性问题:即便设置了
ssh.postBuffer,远端服务器的SSH超时阈值过短、中间网络防火墙拦截或路由波动,都可能导致刚启动对象传输就断开。可以:- 执行
ssh -T git@<远端仓库地址>,保持连接观察是否会主动断开; - 在本地
~/.ssh/config中添加KeepAlive配置,维持连接:Host <远端仓库主机名> ServerAliveInterval 60 ServerAliveCountMax 5
- 执行
- HTTP/HTTPS代理限制:如果使用HTTP协议推送,代理服务器可能限制了大文件传输时长或单次传输大小,尝试关闭代理后重试。
2. 远端仓库限制
- 仓库容量或推送阈值超限:远端仓库可能设置了单仓库大小上限,或单次推送的对象数量/大小限制,导致刚开始写入就被拒绝。联系仓库管理员确认相关限制规则;
- 远端存储故障:远端服务器磁盘满、权限异常等临时问题,会导致无法接收推送对象。可以先推送一个仅包含微小修改的测试提交,验证是否能正常完成推送,排除大提交的影响。
3. 本地仓库与提交问题
- 超大文件或碎文件过多:要推送的对象总数达23640040,可能包含大量未用Git LFS管理的大文件,或过多碎文件。尝试:
- 用
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print $1}')"定位仓库内的大文件,移除后重新提交; - 启用Git LFS管理大文件,避免直接推送大文件至仓库;
- 用
- 本地仓库损坏:本地仓库的pack文件可能存在损坏,执行
git fsck --full检查仓库完整性,修复损坏的对象。
4. 其他尝试方向
- 拆分推送:将大提交拆分为多个小提交,分批推送至远端;
- 更换传输协议:当前用SSH则换HTTPS尝试,反之亦然,绕过协议层面的限制;
- 重启本地网络设备:排除路由器、网卡等本地设备的临时故障。
内容的提问来源于stack exchange,提问作者codeblue
相关产品推荐
相关产品推荐

