error: RPC failed result=22 - Push to Stash fails
症状
When pushing a large repository into Stash, the following outputs might appear after the git push:
Counting objects: 9554, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5064/5064), done.
Writing objects: 100% (9554/9554), 2.79 GiB | 694.00 KiB/s, done.
Total 9554 (delta 4382), reused 9554 (delta 4382)
error: RPC failed; result=22, HTTP code = 502
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
POST git-receive-pack (33737128 bytes)
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
error: RPC failed; result=22, HTTP code = 413
診断
To turn on Git debug logging, before pushing using the command line, proceed like that for different OS:
Linux の場合
Git コマンドを実行する前に、コマンド ラインで以下を実行します。
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
Windows の場合
Git コマンドを実行する前に、コマンド ラインで以下を実行します。
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1
考えられる原因
When pushing a large amount of data (initial push of a big repository, change with very big file(s)) may require a higher
http.postBuffer
setting on your git client (not the server). From https://www.kernel.org/pub/software/scm/git/docs/git-config.htmlhttp.postBuffer
Maximum size in bytes of the buffer used by smart HTTP transports when POSTing data to the remote system. For requests larger than this buffer size, HTTP/1.1 and Transfer-Encoding: chunked is used to avoid creating a massive pack file locally. Default is 1 MiB, which is sufficient for most requests.
- Configuration on your reverse proxy. Usually ngnix the parameter client_max_body_size is a blocker. The reverse proxy may also have a connection timeout that's closing the connection (e.g.
TimeOut
orProxyTimeout
in apache,proxy_read_timeout
in ngnix). Try bypassing the proxy by pushing directly to Stash IP:port. If this works, it's highly likely that the proxy server is causing the early disconnect and needs to be tuned. - User is using an outbound proxy on his machine that is causing the issue.
回避策
- Push the repository using SSH as this is an error related your HTTP(S) environment / set up.
- Bypass the proxy. Push directly to Stash IP:port.
ソリューション
Increase the Git buffer size to the largest individual file size of your repo:
git config --global http.postBuffer 157286400
Refer to the resolution of Git push fails - client intended to send too large chunked body for ngnix reverse proxy configuration. Increase this parameter to the largest individual file size of your repo.
Bypass the outbound proxy as explained on Can't clone or pull due to a git outbound proxy