科技 · 实用指南
Git 报“RPC failed; curl 92”?改缓冲区前先证明 HTTP/2 故障边界
curl 92 只证明 HTTP/2 流失败,并不证明 Git 需要更大缓冲区。先保留传输不完整线索,每次只比较一个协议或路径变量,保留任何绕行前先验证对象库。

curl 92 只证明 HTTP/2 流失败,并不证明 Git 需要更大缓冲区。先保留传输不完整线索,每次只比较一个协议或路径变量,保留任何绕行前先验证对象库。
libcurl 92 表示 HTTP/2 帧层的流错误,并不指出是 Git、网络、代理还是服务器导致重置。 记录操作是 clone、fetch、pull 还是 push;下载与上传路径并不相同。 用 git -c http.version=HTTP/1.1 做单次对照,不要先写入全局配置。
冻结操作、仓库和不完整传输证据
保存整条错误链:流编号、重置名称、仍缺少的字节数、early EOF 和 index-pack 消息。记录 Git 版本、完整命令、远端主机和时间;分享前删除凭据。
只在新的临时目录或安全目标重试,不要把半成品工作树当作可用仓库,也不要删除现有正常克隆。
先划分仓库与操作范围
在干净位置对同一远端执行同一操作,再比较同主机另一仓库;有授权时,也可在另一台已知正常机器测试同一仓库。
clone/fetch 接收 pack,push 发送请求。面向 push 的 postBuffer 建议不能自动套用到 clone;depth/filter 只能当有限诊断或临时交付。
做一次可逆的 HTTP 版本对照
固定仓库、命令、凭据和网络路径,先跑基线,再用 git -c http.version=HTTP/1.1 做一次对照。-c 不会污染全局设置。
若 HTTP/1.1 成功,只把嫌疑缩小到依赖 HTTP/2 的客户端、中间层或远端行为;若两者都失败,就停止改协议。
逐项比较网络和中间层边界
同一命令只换一条获准路径,例如有线/无线、可信网络/公司代理,或管理员控制下的负载均衡器旁路。记录 DNS、代理/VPN、时间和结果。
不要在一次测试里同时改协议、网络、Git 版本、深度和缓冲区。必要时保存已脱敏的 GIT_CURL_VERBOSE 追踪。
拒绝盲改缓冲区并验证 Git 结果
先用 git config --show-origin --get-all http.postBuffer 查现状。它只影响智能 HTTP POST 缓冲,不能补回 clone 响应中缺失的字节。
只有命令无 early EOF/index-pack 错误地完成、预期 refs 存在并通过适用校验才算关闭;随后移除临时覆盖并交付结果矩阵。
