git clone报错curl 92 HTTP/2流未正常关闭 首次失败二次成功问题求解
报错信息
Cloning into 'Important-Documents'... remote: Enumerating objects: 83, done. remote: Counting objects: 100% (83/83), done. remote: Compressing objects: 100% (81/81), done. error: RPC failed; curl 92 HTTP/2 stream 7 was not closed cleanly before end of the underlying stream error: 4241 bytes of body are still expected fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack: invalid index-pack output
问题产生原因
- 核心触发源为Git默认采用的HTTP/2通信协议兼容性问题:部分网络环境(包括运营商QoS限制、企业防火墙规则、家庭网络NAT会话超时机制)对HTTP/2长连接的支持不完善,首次克隆时HTTP/2数据流在传输完成前被意外中断
- Git默认HTTP传输缓冲区配置过小:当仓库总大小或单个文件大小超出默认缓冲区阈值时,首次传输会触发流截断;第二次克隆时已有部分元数据本地缓存,传输量低于阈值即可正常完成
- 托管平台会话超时限制:部分Git服务端的HTTP/2会话超时阈值设置较短,首次克隆时服务端需要完成对象枚举、压缩的耗时较长,会话被提前断开;第二次请求时服务端已缓存压缩后的对象结果,响应速度更快不会触发超时
解决方案
- 方案1(推荐,适配90%以上场景):全局强制Git使用HTTP/1.1协议通信,避开HTTP/2兼容性问题
执行命令:git config --global http.version HTTP/1.1 - 方案2(适配含大文件的仓库场景):调大HTTP传输缓冲区阈值,以下配置将缓冲区调整为500M,可根据仓库实际大小上调数值
执行命令:git config --global http.postBuffer 524288000 - 方案3(适配网络不稳定场景):开启低速传输容错机制,允许网络速度极低时保持连接不中断
执行命令:git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 - 方案4(临时单次使用):克隆时先执行浅克隆减少单次传输量,之后再拉取完整历史
执行命令:git clone --depth 1 <你的仓库地址> cd <仓库目录> git fetch --unshallow
内容的提问来源于stack exchange,提问作者Laveen Ren
相关产品推荐
相关产品推荐

