外观
报错 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:用户/仓库.gitSSH 连不上先配 SSH 443。
方法六:走代理
链路本身劣质时,代理 能提供更稳定的通道,配合方法一效果最好。
已经 clone 一半失败,怎么继续?
普通 clone 不支持断点续传,失败后目录不完整。推荐:
- 删掉失败的目录;
- 用方法一浅克隆重新拉(成功率最高);
- 再逐步
git fetch加深历史。
速查
| 情况 | 首选 |
|---|---|
| 大仓库首次 clone 失败 | 方法一(浅克隆) |
| 超大仓库(GB 级) | 方法二(部分克隆) |
| HTTP 反复断 | 方法五(改 SSH) |
| 链路差 | 方法六(代理)+ 方法一 |
小结
- 首选浅克隆
--depth 1,再逐步加深——解决 early EOF 最靠谱。 - 超大仓库用
--filter=blob:none部分克隆。 - HTTP 老断就改 SSH;链路差加 代理。
- 还报
RPC failed; curl xx的看 RPC failed 专文。
本文仅供技术学习与研究,请遵守所在国家/地区法律法规。