Git克隆:远程端意外挂起,尝试更改postBuffer,但仍然失败

Git克隆:远程端意外挂起,尝试更改postBuffer,但仍然失败,git,bash,repository,clone,Git,Bash,Repository,Clone,我正在尝试克隆存储库。第一次达到82%时,它半个小时都没有动,所以我取消了克隆,重新开始。在那之后,每次我尝试克隆它时,我都会得到6-10%的结果,然后失败,错误是“远程端意外挂起,早期EOF”。我查找错误并尝试我能找到的所有解决方案,最流行的解决方案是将后缓冲区增加到最大大小。然而,它仍然每次都失败 我不确定这是否有什么不同,但我并没有尝试签入代码,这是大多数报告此问题的其他人似乎都在尝试的。我正在尝试克隆存储库。如果这是一个http事务,您需要与BitBucket支持部门联系,以便他们诊断服

我正在尝试克隆存储库。第一次达到82%时,它半个小时都没有动,所以我取消了克隆,重新开始。在那之后,每次我尝试克隆它时,我都会得到6-10%的结果,然后失败,错误是“远程端意外挂起,早期EOF”。我查找错误并尝试我能找到的所有解决方案,最流行的解决方案是将后缓冲区增加到最大大小。然而,它仍然每次都失败


我不确定这是否有什么不同,但我并没有尝试签入代码,这是大多数报告此问题的其他人似乎都在尝试的。我正在尝试克隆存储库。

如果这是一个http事务,您需要与BitBucket支持部门联系,以便他们诊断服务器端出了什么问题。
如中所述,例如,“:

这只意味着出了问题。
要找出哪里出了问题,您必须询问服务器

请注意,当BitBucket将使用Git 2.5+(2015年第2季度)时,客户端可能会出现更明确的错误消息:

 request was larger than our maximum size xxx
 try setting GIT_HTTP_MAX_REQUEST_BUFFER"
(也就是说,在GIT存储库托管服务器上设置
GIT\u HTTP\u MAX\u REQUEST\u BUFFER

2015年5月20日,见 (于2015年6月1日被合并)
测试改编自:

新的环境变量是
GIT\u HTTP\u MAX\u REQUEST\u BUFFER

GIT\u HTTP\u MAX\u REQUEST\u BUFFER
环境变量(或
http.maxRequestBuffer
config变量)可以设置为更改 git在获取期间将处理的最大ref协商请求;任何 需要较大缓冲区的提取将不会成功

通常不需要更改此值,但如果您从具有大量引用的存储库中获取,则此值可能会有所帮助

可使用单位指定该值(例如,100兆字节的
100M
)。默认值为10兆字节

这个解释很有趣:

http后端
:对缓冲区的spool ref协商请求 何时生成“”以执行引用 协商时,它将http请求主体流式传输到
上传包
,然后将http响应流回到 客户机,如其所示。
理论上,git可以实现全双工;客户端可以在发送请求时使用我们的响应。
然而,实际上,HTTP是一种半双工协议。
即使我们的客户机准备好同时读写,我们也可能有其他HTTP基础设施,包括生成CGI的Web服务器或任何中间代理

,这会导致僵局 尝试通过http获取时。
发生的情况基本上是:

  • Apache将请求代理到CGI、http后端
  • http后端gzip将数据膨胀并将结果发送到upload pack
  • upload pack作用于数据并通过管道生成返回Apache的输出。Apache没有阅读,因为它正忙于编写(步骤1)
  • 这在大多数情况下都可以正常工作,因为
    上传包
    输出在系统管道缓冲区中结束,Apache读取 它一写完就开始写。但如果双方都同意这个要求 并且响应超过了系统管道缓冲区的大小,那么我们 死锁(Apache阻止写入http后端, http后端阻止写入上载包和上载包 阻止写入Apache)

    我们需要通过假脱机输入来打破死锁 或输出。在这种情况下,理想的做法是假脱机输入, 因为Apache不开始读取stdout或 stderr,直到我们使用了所有的输入。所以直到我们 如果这样做,我们甚至无法将错误消息发送给 客户

    解决方案相当直截了当:我们阅读了请求 正文放入http后端的内存缓冲区中,释放 Apache,然后自己将数据馈送到
    upload pack


    通过克隆单个分支机构或仅克隆过去历史的一定数量来减少回购规模的一种选择

    git clone --depth=20 https://repo.git -b master
    

    将仅克隆主分支,深度为20次提交。因为这是一个小得多的实体,所以它通常会工作,然后您可以在之后获取其他分支。不确定您是否可以在之后恢复历史记录,但是对于很多不重要的情况。

    您使用的克隆传输方式是什么?git bash,这就是您的意思吗?不,我指的是http/ssh/等等。?克隆URI是什么样子的
    postBuffer
    是一种http设置,它与向我相信的服务器发送数据有关。http。如果通过ssh访问git时发生相同的错误“致命:远程端意外挂起错误:包对象因信号13死亡”,则uri为Wha?@RobisonSantos可能会尝试并检查您是否正在推送对远程接收器来说太大而无法处理的对象:如果,稍后,要扩展副本以包含完整的历史记录,只需使用
    --unshall
    参数调用
    fetch
    命令:
    git fetch--unshall
    git clone --depth=20 https://repo.git -b master