EDIT (5/26/2017): added "Check if these hotfixes are applicable if your TFS server is running Windows 2012 R2 or earlier" section
If you see an
RPC failed error during
git push, like...
error: RPC failed; result=22, HTTP code = 404
error: RPC failed; result=22, HTTP code = 411
Unable to rewind rpc post data - try increasing http.postBuffer
error: RPC failed; result=56, HTTP code = 0
Don't do it! At least not blindly. Instead:
If you're still running a Git client that's version 1.9.5 or older(!) you should really upgrade Git first (we’re up to 2.8+ now). There are a bug fixes (like this one) in newer versions of Git that should obviate the need to set
We had enough support requests from internal users and external customers hitting bugs in older versions of Git that we decided to add a server-side reminder to TFS/VSTS a few sprints ago:
remote: Microsoft (R) Visual Studio (R) Team Services
remote: We noticed you're using an older version of Git. For a better experience, upgrade to the latest version at https://git-scm.com/downloads
remote: Found 4 objects to send. (6 ms)
Unpacking objects: 100% (4/4), done.
Check if these hotfixes are applicable if your TFS server is running Windows 2012 R2 or earlier
- A large file upload or a large repository clone fails on VSO in Windows Server 2012 R2
- Pushing large files to Team Foundation Server by Git client hangs
Check if you're using a proxy or load balancer
If you're using a terrible proxy that's buggy or doesn’t support chunked encoding, you'll see errors for larger pushes. The same thing can happen if you put on-prem TFS behind a misconfigured load balancer. If the same push succeeds when bypassing the proxy, or bypassing the load balancer (e.g. by pushing to localhost from the server itself), then fix your proxy or load balancer instead!
What if my proxy or load balancer is broken, but I don't have any control over it?
This is the only scenario that I've seen where setting http.PostBuffer is useful for newer versions of Git.
Is setting http.postBuffer harmful?
AFAICT, it's more unnecessary than harmful, but there are a few negative side effects:
- Increasing it above the default may increase latency for larger pushes (since the client will buffer the HTTP request into larger chunks).
- If you set it larger than the HTTP chunk size limit for your HTTP server (e.g.
maxRequestLengthin web.config for TFS servers), then all pushes larger than the chunk size limit will start failing.
How do I unset http.postBuffer if I've already set it?
To check if it's set, run:
git config --show-origin --get-all http.postBuffer
You may have to unset it in both your global
git config --global --unset http.postBuffer
As well as in your repo level
.git/config (which overrides the global setting):
git config --local --unset http.postBuffer