如果这是一个 http 事务,您需要联系 BitBucket 支持,让他们诊断服务器端出了什么问题。
如“howto/use-git-daemon”中所述:
fatal: The remote end hung up unexpectedly
这只是表示某事出了问题。
要找出什么出了问题,您必须询问服务器。
请注意,当 BitBucket 将使用 Git 2.5+(2015 年第二季度)时,客户端可能会收到更明确的错误消息:
request was larger than our maximum size xxx
try setting GIT_HTTP_MAX_REQUEST_BUFFER"
(即在托管服务器的Git存储库上设置GIT_HTTP_MAX_REQUEST_BUFFER)
参见commit 6bc0cb5Jeff King (peff),2015 年 5 月 20 日。
(由 Junio C Hamano -- gitster -- 合并,commit 777e75b,2015 年 6 月 1 日)
测试改编自:Dennis Kaarsemaker (seveas)
新的环境变量是GIT_HTTP_MAX_REQUEST_BUFFER:
GIT_HTTP_MAX_REQUEST_BUFFER 环境变量(或
http.maxRequestBuffer config 变量)可以设置为更改
git 在获取期间将处理的最大 ref 协商请求;任何
需要更大缓冲区的 fetch 不会成功。
此值通常不需要更改,但如果您从具有大量引用的存储库中获取,可能会有所帮助。
可以使用单位指定值(例如,100M 表示 100 兆字节)。默认值为 10 兆字节。
解释很有趣:
http-backend: spool ref 协商请求缓冲
当http-backend 产生“upload-pack”来做参考
协商,它将http请求正文流式传输到
upload-pack,然后将 http 响应流式传输回
客户端读取。
理论上,git可以走全双工;客户端可以在发送请求时使用我们的响应。
然而,在实践中,HTTP 是一种半双工协议。
即使我们的客户端准备好同时读取和写入,我们也可能有其他 HTTP 基础设施,包括生成 CGI 的网络服务器或任何中间代理。
In at least one documented case,这会导致死锁
尝试通过 http 获取时。
发生的事情基本上是:
- Apache 将请求代理到 CGI,http-backend。
- http-backend gzip-inflate 数据并将结果发送到upload-pack。
- upload-pack 作用于数据并通过管道生成输出回 Apache。 Apache 没有读取,因为它正忙于写入(第 1 步)。
这在大多数情况下都可以正常工作,因为 upload-pack
输出最终在系统管道缓冲区中,Apache 读取
它一写完。但如果两者都要求
并且响应超过了系统管道缓冲区大小,那么我们
死锁(Apache 阻止写入 http 后端,
http-backend 阻止写入上传包和上传包
阻止写入 Apache)。
我们需要通过假脱机输入来打破僵局
或输出。在这种情况下,最好对输入进行假脱机,
因为 Apache 不会开始读取标准输出 或
stderr 直到我们消耗完所有输入。所以直到我们
这样做,我们甚至无法将错误消息发送到
客户。
解决方案相当简单:我们阅读了请求
正文到 http 后端的内存缓冲区中,释放
Apache,然后自己将数据提供给upload-pack。