You need to enable JavaScript to run this app. 如何解决git p4迁移Perforce仓库到GitHub的推送连接中断报错
优惠活动
大模型
产品
解决方案
定价
更多

如何解决git p4迁移Perforce仓库到GitHub的推送连接中断报错

问题根因确认

你遇到的推送报错和本地7.79GiB的.git目录体积直接强相关,本质上是单次推送的全量包体积过大,导致Windows系统下的TCP长连接在大流量传输过程中被本地网络栈、中间网关强制中断,对应日志里的curl 56 errno 10053就是Windows系统主动终止连接的典型报错。
之前调整http.postBuffer、降级HTTP/1.1没有效果的原因是:这两个配置只能解决本地临时写入缓冲不足的问题,既绕不开GitHub对单次RPC推送的体积限制,也没法解决长连接传输时间过长被中断的问题。

可落地的修复方案

方案1:分段推送全量历史(无需清理仓库,最快解决)

把原本要一次性推完的7.78GiB全量提交,拆成多个小体积的分批次推送,每次传输的包体积控制在1GiB以内,就能避开长连接超时中断的问题:

  1. 先按时间从早到晚列出所有提交节点,找到适合拆分的历史锚点:
    git log --oneline --reverse --pretty=format:"%h %ad" --date=short
    
  2. 从最早的提交开始,逐个区间往GitHub推送:比如最早的根提交哈希是a1b2c3d,第一个拆分锚点的提交哈希是e4f5g6h,执行命令推送第一个区间的历史:
    git push origin a1b2c3d:refs/heads/main e4f5g6h:refs/heads/main
    
  3. 等第一个区间推送完成后,再依次取下一个拆分锚点,重复执行推送命令,直到把全部提交历史都同步到远端main分支即可。这种方式每次传输的数据量很小,传输耗时短,不会触发连接中断。
  4. 配套Windows网络优化,进一步降低中断概率:
    • 临时关闭Git的对象压缩逻辑,减少本地压缩耗时:git config core.compression 0
    • 拉满低速超时阈值,避免Git因为瞬时网速波动主动断连:
      git config http.lowSpeedLimit 0
      git config http.lowSpeedTime 999999
      

方案2:清理git p4导入带来的冗余历史文件(从根源缩小仓库体积)

绝大多数从Perforce全量导入的Git仓库,.git目录体积虚高都是因为保留了大量历史上已经删除的构建产物、二进制安装包、临时大文件,这些内容根本不需要同步到GitHub上:

  1. 先扫描全历史中超过100MiB的大文件,标记出不需要保留的冗余内容:
    git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | awk '/^blob/ {print substr($0,6)}' | sort --numeric-sort --key=2 | tail -n 20
    
  2. 将这些冗余大文件从全量提交历史中清理后,通常整体仓库体积能压缩到原大小的1/10以内,之后一次性全量推送就能顺利完成,不会再出现连接中断的问题。

操作注意:分段推送过程中如果出现单区间推送失败,直接重新执行对应区间的推送命令即可,Git会自动跳过已经传输完成的对象,不会重复上传。


内容的提问来源于stack exchange,提问作者IkutaLanToma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 04:24:02