外观
报错 RPC failed; curl 56 / curl 92 / result=18 解决方法
git clone / git fetch 大仓库时,经常在传输过程中断,报类似:
text
error: RPC failed; curl 56 Recv failure: Connection was reset
error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly
error: RPC failed; result=18, HTTP code = 200
fatal: expected flush after ref listing
fetch-pack: unexpected disconnect while reading sideband packet本质是HTTP 传输被中途打断。按下面几招基本能解决。
方法一:增大 http.postBuffer
传输大对象时缓冲区太小容易断,调大它:
bash
git config --global http.postBuffer 524288000 # 500MB方法二:禁用 HTTP/2,改用 HTTP/1.1(专治 curl 92)
curl 92 HTTP/2 stream 这类报错,是 HTTP/2 在不稳定链路上出问题。切回 HTTP/1.1:
bash
git config --global http.version HTTP/1.1这一招对 curl 92 和很多莫名中断非常有效。
方法三:放宽低速中断阈值
git 默认速度过低会主动断开,链路慢时会误伤:
bash
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999方法四:浅克隆,减少一次传输量
大仓库一次传太多容易断,先浅克隆再补历史:
bash
git clone --depth 1 https://github.com/用户/仓库.git
cd 仓库
git fetch --unshallow # 之后需要完整历史再补或用部分克隆只拿需要的对象:
bash
git clone --filter=blob:none https://github.com/用户/仓库.git方法五:走代理 / 改 SSH
如果是链路被干扰导致的 reset:
方法六:result=18 多半是 MTU / 链路问题
result=18(transfer closed with outstanding read data)常与 MTU 或链路抖动有关。除上面几招外,可尝试:
- 换网络环境(如手机热点)对比,确认是否本地网络问题;
- 走代理绕开劣质链路;
- 结合方法一 + 二 + 四一起用。
组合拳(推荐直接全上)
bash
git config --global http.postBuffer 524288000
git config --global http.version HTTP/1.1
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
# 再浅克隆
git clone --depth 1 https://github.com/用户/仓库.git速查
| 报错 | 首选 |
|---|---|
curl 92 HTTP/2 stream | 方法二(切 HTTP/1.1) |
curl 56 Connection was reset | 方法五(代理/SSH)+ 方法一 |
result=18 | 方法四(浅克隆)+ 方法五 |
| 大仓库反复断 | 组合拳 |
小结
本文仅供技术学习与研究,请遵守所在国家/地区法律法规。