Technology · PRACTICAL GUIDE
Git says “RPC failed; curl 92”? Prove the HTTP/2 boundary before changing buffers
A curl 92 line proves an HTTP/2 stream failed, not that Git needs a larger buffer. Preserve the incomplete-transfer clues, compare one protocol or path variable at a time, and verify the object database before keeping any workaround.

A curl 92 line proves an HTTP/2 stream failed, not that Git needs a larger buffer. Preserve the incomplete-transfer clues, compare one protocol or path variable at a time, and verify the object database before keeping any workaround.
The useful question is not “Which copied command makes the error disappear?” It is “Which boundary changes the result, and did Git receive a complete, valid object set?” The workflow below keeps those two proofs separate.
Freeze the operation, repository and incomplete-transfer evidence
Copy the complete error chain, not only “curl 92”: keep the HTTP/2 reset name, stream number, “bytes still expected,” early EOF and index-pack messages. Record git --version, the exact command, remote URL host, timestamp and whether the operation was clone, fetch, pull or push. Redact credentials and repository secrets before sharing.
Repeat only in a new temporary directory or other safe target. Do not treat a partially created working tree as usable, and do not delete an existing good clone while investigating. If only one repository fails, record its approximate pack size and whether another repository on the same host succeeds.
Separate repository and operation scope before blaming HTTP/2
Test the same operation against the same remote from a clean temporary location. Then compare one different repository on the same host and, if authorized, the same repository from another known-good machine. This distinguishes repository or pack-size effects from a host-wide service failure.
Clone and fetch primarily receive pack data; push sends request data. A postBuffer suggestion written for a push path does not automatically apply to an incomplete clone. Treat --depth or --filter as bounded diagnostics or temporary delivery options, and document that they omit history or objects.
Run one reversible HTTP-version comparison
Keep repository, command, credentials and network path unchanged. Run the baseline, then a single comparison such as git -c http.version=HTTP/1.1 clone … or the equivalent fetch command. The -c setting applies to that invocation and leaves global configuration untouched.
If HTTP/1.1 succeeds while the default path fails, the evidence narrows the suspect set to HTTP/2-dependent client, intermediary or remote behavior. It does not prove which one is defective. If both fail, stop changing protocol and move to repository, path and service comparisons.
Compare network and intermediary boundaries without stacking changes
Use the same command and repository on one alternative authorized path: for example wired versus Wi-Fi, a trusted network without a corporate proxy, or direct-to-server versus a load balancer for an administrator-controlled service. Record DNS target, proxy/VPN state, timestamps and results.
Do not change HTTP version, network, Git version, clone depth and buffer size in the same run. A successful bypass is evidence to fix the proxy or load balancer, not a reason to keep a mystery workaround. Capture a redacted GIT_CURL_VERBOSE trace only when necessary because headers and URLs may be sensitive.
Reject blind buffer changes and verify the Git result
Check git config --show-origin --get-all http.postBuffer before assuming the default. The setting affects smart-HTTP POST buffering; raising it can increase resource use and is relevant only to a narrow class of push and broken-intermediary cases. It cannot restore bytes missing from a clone response.
Accept closure only after the command completes without early EOF or index-pack failure, the expected refs exist, and the repository passes the verification appropriate to its use. Remove any temporary HTTP/1.1 override, preserve the result matrix, and escalate the smallest proven boundary with redacted evidence.
