平台通知:仅限服务器和数据中心 - 本文仅适用于服务器和数据中心平台.
问题
当用户试图运行“GIT推“显示下列错误消息:
$ git push
Counting objects: 2332669, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (360818/360818), done.
error: RPC failed; result=22, HTTP code = 411
fatal: The remote end hung up unexpectedly
Writing objects: 100% (2332669/2332669), 483.30 MiB | 114.26 MiB/s, done.
Total 2332669 (delta 1949888), reused 2330461 (delta 1949349)
fatal: The remote end hung up unexpectedly
致因
Git中的“智能HTTP”协议在POST请求中使用“传输编码:分组”,当它包含大小大于1MB的打包对象时。
有些代理服务器,如Nginx,默认情况下不支持这种传输编码,请求在到达Bitbucket Server之前将被拒绝。因此,Bitbucket Server日志将不会显示任何额外的信息。
另一个可能的原因是负载平衡器配置错误。
变通
-
当推送大量数据(大存储库的初始推送,使用非常大的文件进行更改)时,可能需要更高的数据。
http.postBuffer
设置在你的git上客户(不是服务器)。从…Https://www.kernel.org/pub/software/scm/git/docs/git-config.htmlHttp.postBuffer
向远程系统提交数据时,智能HTTP传输使用的缓冲区的最大大小(以字节为单位)。对于大于此缓冲区大小的请求,HTTP/1.1和传输编码:分块用于避免在本地创建大规模的包文件。缺省值为1 MIB,这足以满足大多数请求。
- 配置倒转代理。通常将参数命名为
client_max_body_size
是个阻滞剂。反向代理也可能有关闭连接的连接超时(例如,TimeOut
或ProxyTimeout
在阿帕奇,proxy_read_timeout
在ngnix)。尝试绕过代理,直接推送到Bitbucket Server IP:Port。如果这样做有效的话,代理服务器很可能会导致早期断开,需要进行调优。 - 用户正在使用出站他的机器上的代理导致了这个问题。
分辨力
-
将Git缓冲区大小提高到回购的最大单个文件大小:
git config --global http.postBuffer 157286400
-
参见.的决议Git推送失败-客户端打算发送太大的块体用于ngnix反向代理配置。将此参数增加到回购的最大单个文件大小。
-
中解释的那样绕过出站代理。由于git出站代理无法复制或拉动