Skip to content

报错 fatal: early EOF / index-pack failed 解决方法

克隆大仓库时下载到一半失败,典型报错:

text
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 6624 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: index-pack failed

意思是数据还没传完连接就断了,几乎都发生在大仓库 + 不稳定链路上。下面按有效性排序。

方法一:浅克隆(最有效)

一次少传点,是解决大仓库 early EOF 最管用的办法:

bash
# 只拉最近一次提交
git clone --depth 1 https://github.com/用户/仓库.git

# 进入后按需补历史
cd 仓库
git fetch --unshallow

--unshallow 若也断,可分批加深:

bash
git fetch --depth 100
git fetch --depth 1000
git fetch --unshallow

方法二:部分克隆(超大仓库更优)

只下 commit/tree,blob 用到再拉,大幅减少初次传输:

bash
git clone --filter=blob:none https://github.com/用户/仓库.git

方法三:加大 buffer + 关闭压缩

bash
git config --global http.postBuffer 524288000
git config --global core.compression 0     # 关压缩,降低服务端打包中断概率

方法四:切 HTTP/1.1

bash
git config --global http.version HTTP/1.1

方法五:改用 SSH 克隆

HTTP 传输反复 early EOF 时,换 SSH 往往一次成功(SSH 不吃 HTTP buffer/压缩这套坑):

bash
git clone git@github.com:用户/仓库.git

SSH 连不上先配 SSH 443

方法六:走代理

链路本身劣质时,代理 能提供更稳定的通道,配合方法一效果最好。

已经 clone 一半失败,怎么继续?

普通 clone 不支持断点续传,失败后目录不完整。推荐:

  1. 删掉失败的目录;
  2. 方法一浅克隆重新拉(成功率最高);
  3. 再逐步 git fetch 加深历史。

速查

情况首选
大仓库首次 clone 失败方法一(浅克隆)
超大仓库(GB 级)方法二(部分克隆)
HTTP 反复断方法五(改 SSH)
链路差方法六(代理)+ 方法一

小结

  • 首选浅克隆 --depth 1,再逐步加深——解决 early EOF 最靠谱。
  • 超大仓库用 --filter=blob:none 部分克隆。
  • HTTP 老断就改 SSH;链路差加 代理
  • 还报 RPC failed; curl xx 的看 RPC failed 专文

本文仅供技术学习与研究,请遵守所在国家/地区法律法规。

本站为技术学习交流站点,与 GitHub, Inc. 无任何隶属或官方关系。所有内容仅供技术研究与学习,请遵守所在国家/地区的法律法规。