Receiving objects:  13% (1309/10065), 796.00 KiB | 6 KiB/s
fatal: The remote end hung up unexpectedly
    
5 个评论
Caps
你能检查一下你的git托管商是否在线吗?
Joe
@Caps 它是在线的,网络也是正常的。这似乎在一段时间后持续发生。
VonC
你能检查一下git config --global http.postBuffer 524288000是否对你的克隆有任何影响?是否有任何额外的错误信息,如"error: RPC failed; result=56, HTTP code = 0
Joe
@VonC - 上述命令执行得很好,在控制台没有看到任何输出。
VonC
@Joe 你能在git config --global http.postBuffer 524288000之后克隆吗?
git
Joe
Joe
发布于 2011-07-27
30 个回答
VonC
VonC
发布于 2017-06-11
已采纳
0 人赞同

Quick solution:

对于这种错误,我通常先将postBuffer的大小提高。

git config --global http.postBuffer 524288000

(下面的一些评论报告说不得不把数值翻倍)。

git config --global http.postBuffer 1048576000

(For npm publish, 马丁-布劳恩 reports in the comments将其设置为不超过50 000 000,而不是默认的1 000 000)

###更多信息。

From the git config man page, http.postBuffer is about:

智能HTTP传输系统在向远程系统发送数据时使用的缓冲区的最大尺寸(字节)。
对于大于这个缓冲区大小的请求,使用HTTP/1.1和Transfer-Encoding: chunked来避免在本地创建一个巨大的包文件。默认值为1 MiB,这对大多数请求来说是足够的。

即使对克隆人来说,这也会产生影响,在这个例子中,也是如此。OP Joe reports:

[clone] works fine now

注意:如果服务器端出了问题,而且服务器使用的是Git 2.5+(2015年第二季度),错误信息可能会更明确。
See "Git克隆:远程端意外挂起,尝试改变postBuffer但仍然失败".

Kulai (in the comments) points out to 这个Atlassian Troubleshooting Git页面,其中补充道。

替换代码8】表示Curl接收到CURLE_RECV_ERROR的错误,这意味着在克隆过程中存在一些问题,导致数据无法被接收。
通常,这是由网络设置、防火墙、VPN客户端或反病毒造成的,它们在所有数据传输之前就终止了连接。

它还提到了以下环境变量,以帮助调试过程。

# Linux
export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1
#Windows
set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

有了Git 2.25.1(2020年2月),你就会对这个http.postBuffer有更多了解。"解决方案"。

See 提交7a2dc95, commit 1b13e90(2020年1月22日)由brian m. carlson (bk2204).
(Merged by Junio C Hamano -- gitster -- in 提交53a8329, 2020年1月30日)
(Git邮件列表讨论)

docs: mention when increasing http.postBuffer is valuable

签名:Brian M. Carlson

在各种各样的情况下,用户都会发现自己有HTTP推送问题。

很多时候,这些问题是由于防病毒软件、过滤代理或其他中间人的情况造成的;其他时候,它们是由于网络的简单不可靠。

然而,网上发现的一个解决HTTP推送问题的常见方法是增加http.postBuffer。

这对上述情况都不起作用,只在少数高度限制的情况下有用:基本上,当连接不能正确支持HTTP/1.1时。

记录什么时候提高这个值是合适的,以及它的实际作用,并劝阻人们不要把它作为推送问题的一般解决方案,因为它在那里是无效的。

因此,在文件中对git config http.postBuffer now includes:

http.postBuffer

智能HTTP传输系统在向远程系统发送数据时使用的缓冲区的最大尺寸(字节)。
对于大于这个缓冲区大小的请求,HTTP/1.1和Transfer-Encoding: chunked被使用,以避免在本地创建一个巨大的包文件。
默认为1 MiB,对大多数请求来说已经足够。

请注意,提高这个限制只对禁用分块传输编码有效,因此只应在远程服务器或代理只支持HTTP/1.0或不符合HTTP标准时使用。
一般来说,提高这一点对大多数推送问题来说不是一个有效的解决方案,但会大大增加内存消耗,因为即使是小的推送也要分配整个缓冲区。.

这对我来说也很有效,不过我有点困惑,什么时候 "智能HTTP传输 "会参与到ssh://的传输中。
谢谢你,这个技巧起作用了,但它的数值是答案中的两倍。
也许文档是错误的,但POST并不是你通过HTTP获取/克隆时发生的事情。我很困惑,为什么postBuffer的设置在克隆或取回时有任何影响。
VonC
@Astravagrant 好的,我已经更新了答案,使这个值更加明显。
注意:在提高postBuffer时,我遇到了一些npm publish的问题。当我把它设置为50000000时,问题就没有了。顺便说一下,默认值是1000000
wizawu
wizawu
发布于 2017-06-11
0 人赞同

Bitbucket也有同样的错误。修正者

git config --global http.postBuffer 500M
git config --global http.maxRequestBuffer 100M
git config --global core.compression 0
    
Rich
我试过这里张贴的所有解决方案,但只有这一个解决方案起作用了!"。
Kurtis
Kurtis
发布于 2017-06-11
0 人赞同

The http.postBuffer trick did not work for me. However:

对于其他遇到这个问题的人来说,这可能是GnuTLS的一个问题。如果你设置了Verbose模式,你可能会看到潜在的错误看起来与下面的代码类似。

不幸的是,到目前为止,我唯一的解决办法是使用SSH。

我见过一个解决方案的帖子elsewhere用OpenSSL而不是GnuTLS来编译Git。这个问题有一个活跃的错误报告here.

GIT_CURL_VERBOSE=1 git clone https://github.com/django/django.git
Cloning into 'django'...
* Couldn't find host github.com in the .netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 192.30.252.131... * Connected to github.com (192.30.252.131) port 443 (#0)
* found 153 certificates in /etc/ssl/certs/ca-certificates.crt
*    server certificate verification OK
*    common name: github.com (matched)
*    server certificate expiration date OK
*    server certificate activation date OK
*    certificate public key: RSA
*    certificate version: #3
*    subject: 
*    start date: Mon, 10 Jun 2013 00:00:00 GMT
*    expire date: Wed, 02 Sep 2015 12:00:00 GMT
*    issuer: C=US,O=DigiCert Inc,OU=www.digicert.com,CN=DigiCert High Assurance EV CA-1
*    compression: NULL
*    cipher: ARCFOUR-128
*    MAC: SHA1
> GET /django/django.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.4
Host: github.com
Accept: */*
Accept-Encoding: gzip
Pragma: no-cache
< HTTP/1.1 200 OK
< Server: GitHub.com
< Date: Thu, 10 Oct 2013 03:28:14 GMT
< Content-Type: application/x-git-upload-pack-advertisement
< Transfer-Encoding: chunked
< Expires: Fri, 01 Jan 1980 00:00:00 GMT
< Pragma: no-cache
< Cache-Control: no-cache, max-age=0, must-revalidate
< Vary: Accept-Encoding
* Connection #0 to host github.com left intact
* Couldn't find host github.com in the .netrc file; using defaults
* About to connect() to github.com port 443 (#0)
*   Trying 192.30.252.131... * connected
* found 153 certificates in /etc/ssl/certs/ca-certificates.crt
* SSL re-using session ID
*    server certificate verification OK
*    common name: github.com (matched)
*    server certificate expiration date OK
*    server certificate activation date OK
*    certificate public key: RSA
*    certificate version: #3
*    subject: 
*    start date: Mon, 10 Jun 2013 00:00:00 GMT
*    expire date: Wed, 02 Sep 2015 12:00:00 GMT
*    issuer: C=US,O=DigiCert Inc,OU=www.digicert.com,CN=DigiCert High Assurance EV CA-1
*    compression: NULL
*    cipher: ARCFOUR-128
*    MAC: SHA1
> POST /django/django.git/git-upload-pack HTTP/1.1
User-Agent: git/1.8.4
Host: github.com
Accept-Encoding: gzip
Content-Type: application/x-git-upload-pack-request
Accept: application/x-git-upload-pack-result
Content-Encoding: gzip
Content-Length: 2299
* upload completely sent off: 2299out of 2299 bytes
< HTTP/1.1 200 OK
< Server: GitHub.com
< Date: Thu, 10 Oct 2013 03:28:15 GMT
< Content-Type: application/x-git-upload-pack-result
< Transfer-Encoding: chunked
< Expires: Fri, 01 Jan 1980 00:00:00 GMT
< Pragma: no-cache
< Cache-Control: no-cache, max-age=0, must-revalidate
< Vary: Accept-Encoding
remote: Counting objects: 232015, done.
remote: Compressing objects: 100% (65437/65437), done.
* GnuTLS recv error (-9): A TLS packet with unexpected length was received.
* Closing connection #0
error: RPC failed; result=56, HTTP code = 200
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
    
我得到了和你一样的冗长的日志,但通过使用更大的postBuffer值解决了这个问题。
git config --global http.postBuffer 1000000000000000000000000000
较新的git版本由于 "fatal: bad numeric config value '100000000000' for 'http.postbuffer': out of range "而失败,但在我的情况下,设置配置值并没有帮助。
我可以达到的最大尺寸是100000000000000
Андрей Саяпин
Андрей Саяпин
发布于 2017-06-11
0 人赞同

基于这个答案, I tried following (with https url):

  • initial cloning of repo:
  • git clone --depth 25 url-here

  • fetch commits with increasing twice per try depth:
  • git fetch --depth 50

    git fetch --depth 100

    git fetch --depth 200

    ...等等。

  • eventually (when I think enough is fetched) I run git fetch --unshallow - and it's done.
  • 这个过程显然需要更多的时间,但在我的案例中,设置http.postBuffercore.compression并没有帮助。

    UPD:我发现,通过ssh对任何 repo 大小都有效(意外发现),用git clone <ssh url>完成,因为你已经创建了 ssh 密钥。一旦获取了 repo,我就用git remote set-url <https url to repo>改变远程地址。

    git clone --depth 25 url-here worked for me without using fetch
    这个答案是精彩纷呈这也是唯一对我有效的方法。 我使用的是Bitbucket,克隆较小的仓库可以,而克隆较大的仓库则不行。 这种按块获取的方法完全有效。
    对我来说,从Bitbucket获取的工作非常好。特别是我的 repo 总共只有 56 个提交。
    Ayan
    Ayan
    发布于 2017-06-11
    0 人赞同

    对我来说,唯一有效的方法是使用以下方法克隆 repo。HTTPS的链接,而不是SSH link.

    Srikanth Josyula
    Srikanth Josyula
    发布于 2017-06-11
    0 人赞同

    这是由于网络连接问题,我也面临同样的问题。 我做了一个浅显的代码拷贝,使用

    git clone --depth 1 //FORKLOCATION
    

    后来又用以下方法取消了克隆的许可

    git fetch --unshallow
        
    This seems does the trick
    6年多后,我来到这里--这似乎是唯一有效的办法。 谢谢
    Sazzad Hissain Khan
    Sazzad Hissain Khan
    发布于 2017-06-11
    0 人赞同

    对于共享带宽,尝试在负载较少时克隆。否则,请尝试使用高速连接。如果仍然不成功,请使用下面的命令。

    git config --global http.postBuffer 2048M
    git config --global http.maxRequestBuffer 1024M
    git config --global core.compression 9
    git config --global ssh.postBuffer 2048M
    git config --global ssh.maxRequestBuffer 1024M
    git config --global pack.windowMemory 256m 
    git config --global pack.packSizeLimit 256m
    

    并尝试再次克隆。你可能需要根据你的可用内存大小来改变这些设置。

    Ruxandra T.
    Ruxandra T.
    发布于 2017-06-11
    0 人赞同

    观察..:改变http.postBuffer可能还需要为gitlab设置Nginx配置文件,通过调整client_max_body_size的值来接受更大的客户端尺寸。

    不过,如果你能访问Gitlab的机器,也有一个解决方法或到其网络中的一台机器,那是通过利用git bundle

  • go to your git repository on the source machine
  • run git bundle create my-repo.bundle --all
  • transfer (eg., with rsync) the my-repo.bundle file to the destination machine
  • on the destination machine, run git clone my-repo.bundle
  • git remote set-url origin "path/to/your/repo.git"
  • git push
  • 万事如意!

    Aransiola Oluwaseun
    Aransiola Oluwaseun
    发布于 2017-06-11
    0 人赞同

    如果你使用的是https,而你得到的是错误。

    我用https代替了http,它解决了我的问题。

    git config --global https.postBuffer 524288000
        
    如果我使用ssh怎么办?我不能转移到http/https。
    hmjha
    hmjha
    发布于 2017-06-11
    0 人赞同

    我在使用以下命令后得到了解决。

    git repack -a -f -d --window=250 --depth=250

    当clone还没有创建本地git repo时,你如何运行它?
    最后一直在纠结这个问题,除了这个命令和之后的git push origin main,一切都不工作了。谢谢
    G Gopikrishna
    G Gopikrishna
    发布于 2017-06-11
    0 人赞同

    我也遇到了同样的问题。 我用试验和错误的方法解决了这个问题。我改变了core.compression的值,直到它发挥作用。

    我从 "git config --global core.compression 1 "开始,尝试了3次之后

    "git config --global core.compression 4 "对我有用。

    G.Flemming
    G.Flemming
    发布于 2017-06-11
    0 人赞同

    好吧,我想推一个219MB的解决方案,但我没有运气与

    git config --global http.postBuffer 524288000
    

    而且,有一个525MB的帖子缓冲区有什么意义呢? 这很傻。所以我看了看下面的git错误。

    Total 993 (delta 230), reused 0 (delta 0)
    POST git-receive-pack (5173245 bytes)
    error: fatal: RPC failed; curl 56 SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054
    

    所以git想发5MB的帖子,然后我把帖子的缓冲区设为6MB,结果成功了

    git config --global http.postBuffer 6291456
        
    这确实有道理。我看了一下我的 repo 大小,是 15 mb。ssh和HTTPS都报告了同样的错误,ssh的帮助不大。我曾经从github上克隆过更大的项目,没有问题,这个项目是在bitbucket上,只是不喜欢大项目,而且下载很慢。同样的事情发生在gitlab上。设置任何东西都解决不了问题。这里的问题在于远程。转到github上,将我的postbuffer设置为接近我的repo大小的15M,似乎让我度过了难关,我不相信这是完整的解决方案。
    git config --global http.postBuffer 157286400 , 我在缓冲区设置了这个,改变我的wifi就成功了。
    Juraj Martinka
    Juraj Martinka
    发布于 2017-06-11
    0 人赞同

    当我从由elastic beanstalk管理的AWS EC2实例上托管的远程git repo中克隆数据(通过HTTP)时,我遇到了这个问题。 克隆本身也是在AWS EC2实例上完成的。

    我尝试了上述所有的解决方案和它们的组合。

  • setting git's http.postBuffer
  • settinghttp.maxrequestbuffer
  • turning off git compression and trying "shallow" git clone and then git fetch --unshallow - see fatal: early EOF fatal: index-pack failed
  • tunning GIT memory settings - packedGitLimit et al, see here: fatal: early EOF fatal: index-pack failed
  • tunning nginx configuration - setting client_max_body_size to both big value and 0 (unlimited); setting proxy_request_buffering off;
  • setting options single-request in /etc/resolv.conf
  • throttling git client throughput with trickle
  • using strace for tracing git clone
  • considering update of git client
  • 做完这一切后,我仍然一次又一次地面临同样的问题,直到我发现问题出在弹性负载平衡器(ELB)上,它切断了连接。. 在直接访问EC2实例(托管git repo的那个)而不是通过ELB之后,我终于成功地克隆了git repo 我仍然不确定是哪个ELB(超时)参数造成的,所以我仍然要做一些研究。

    看来,改变连接 排水政策将AWS弹性负载平衡器的超时时间从20秒提高到300秒,为我们解决了这个问题。

    替换代码2】错误和 "连接耗尽 "之间的关系很奇怪,对我们来说并不明显。可能是连接耗尽的超时变化导致ELB配置的一些内部变化,修复了过早关闭连接的问题。

    这是AWS论坛上的相关问题(还没有答案)。https://forums.aws.amazon.com/thread.jspa?threadID=258572

    vallabh
    vallabh
    发布于 2017-06-11
    0 人赞同

    /etc/resolv.conf中,将该行添加到文件的末尾。

    options single-request
        
    如果postBuffer没有帮助,我建议接下来尝试这个答案,因为这对我很有效。
    Dody
    Dody
    发布于 2017-06-11
    0 人赞同

    我也有同样的问题,与网络连接不良有关,所以在尝试了一些git配置后,我刚刚断开了网络连接,又重新连接,就成功了!

    似乎在连接丢失后(或引发这种情况的动作),git就被卡住了。

    我希望它能对这里的更多人有所帮助。

    Best,

    NanerLee
    NanerLee
    发布于 2017-06-11
    0 人赞同

    我也有同样的问题。这个问题的原因正如Kurtis对GNUTLS的描述。

    如果你有同样的原因,并且你的系统是Ubuntu,你可以通过从ppa:git-core/ppa安装最新版本的git来解决这个问题,命令如下。

    sudo add-apt-repository ppa:git-core/ppa
    sudo apt-get update
    sudo apt-get git
        
    apt-get git??
    shonky linux user
    shonky linux user
    发布于 2017-06-11
    0 人赞同

    浪费了几个小时来尝试这些解决方案,但最终追踪到这是企业的IPS(入侵保护系统)在传输一定数量的数据后放弃了连接。

    Swapnil Naukudkar
    Swapnil Naukudkar
    发布于 2017-06-11
    0 人赞同

    增加postBuffer大小和maxRequestBuffer将帮助你解决这个问题。请按照以下步骤操作。

    steps:

    1 .打开终端或Git Bash,用 "cd "转到你想克隆 repo 的位置。

    2.Set compression to 0

    git config --global core.compression 0
    

    3.设置postBuffer大小

    git config --global http.postBuffer 1048576000
    

    4.设置maxRequestBuffer大小

    git config --global http.maxRequestBuffer 100M
    

    5.现在开始克隆

    git clone <repo url>
    

    6.等待,直到克隆完成。

    谢谢你。编码快乐!!!。

    watsonmw
    watsonmw
    发布于 2017-06-11
    0 人赞同

    我有一个类似的问题,但是是在竹子的工作中。 Bamboo在本地克隆(本地但通过SSH代理)一个缓存的版本库时失败了,我删除了缓存,之后就成功了,但任何时候它试图从本地缓存克隆都会失败。 看起来是竹子的SSH代理版本的问题,而不是git本身的问题。

    truf
    truf
    发布于 2017-06-11
    0 人赞同

    我在Kubuntu中使用git时遇到了这个问题。我还注意到网络的整体不稳定,并发现了一个solution.

    在/etc/resolv.conf中 将这一行添加到文件的末尾

    options single-request

    这就解决了每次域名解析前的延迟问题,之后git就开始工作得很好。

    GovindaRaju
    GovindaRaju
    发布于 2017-06-11
    0 人赞同

    SOLVED WITH WIFI Router Setting :

    当我在WIFI上使用PPPoE设置(由WIFI路由器自动登录)时,我也遇到了同样的问题。

    Git的下载速度非常慢,只有15kb。

    packet_write_wait:连接到17.121.133.16端口22:管道断裂 致命:远程端意外挂断了 致命:早期EOF 致命:索引打包失败

    解决方案: 1.将设置改为动态IP,重新启动wifi路由器。 2.2.从网络浏览器登录到互联网服务提供商的门户网站(不要配置PPPoE,从wifi路由器自动登录)。

    更改Git后,下载速度为1.7MB。

    vuhung3990
    vuhung3990
    发布于 2017-06-11
    0 人赞同

    ssh代替http,这不是一个好的答案,但至少对我来说是有效的。

    unclehowell
    unclehowell
    发布于 2017-06-11
    0 人赞同

    This solved my problem:

    git clone --depth=20 https://repo.git -b master
        
    marc meyer
    marc meyer
    发布于 2017-06-11
    0 人赞同

    上面的技巧并没有帮助我,因为该 repo 大于 github 允许的最大推送尺寸。 有用的是一个建议,来自https://github.com/git-lfs/git-lfs/issues/3758其中建议一次推一点。

    如果你的分支有很长的历史,你可以试着每次推送一个较少的 一次推送较少的提交量(比如2000个),具体方法如下。

    git rev-list --reverse master | ruby -ne 'i ||= 0; i += 1; puts $_ if i % 2000 == 0' | xargs -I{} git push origin +{}:refs/heads/master
    

    这将浏览master的历史,每次推送2000个对象。(当然,你也可以在这两个地方用不同的分支代替 替换不同的分支,如果你愿意的话)。完成后,你应该可以推送 master,一切就都是最新的了。如果2000个太 如果2000个太多,而且你又遇到了问题,你可以调整这个数字,使之更

    Tobi G.
    Tobi G.
    发布于 2017-06-11
    0 人赞同

    我不得不删除git clone命令的分支标志。

    David
    David
    发布于 2017-06-11
    0 人赞同

    在MacOSX High Sierra上,我的解决方案是。

    brew install git-lfs
    

    而我的版本库被克隆了,没有任何错误。

    mahemoff
    mahemoff
    发布于 2017-06-11
    0 人赞同

    这可能是一个简单的服务器问题。如果使用GitHub,请检查https://twitter.com/githubstatus.我刚才第一次看到这个,发现GitHub发生了动荡.几分钟后,它又能正常工作了。

    Luca Steeb
    Luca Steeb
    发布于 2017-06-11
    0 人赞同

    这对我来说很有效,因为没有指定标准的名字服务器,所以设置了Googles的名字服务器,随后重新启动网络。

    sudo echo "dns-nameservers 8.8.8.8" >> /etc/network/interfaces && sudo ifdown venet0:0 && sudo ifup venet0:0
        
    Kaka Ruto
    Kaka Ruto
    发布于 2017-06-11
    0 人赞同

    我发现我的问题出在.netrc文件上,如果你也是这样,那么你可以做以下工作。

    打开你的.netrc文件,并编辑它以包括github凭证。 输入nano ~/netrcgedit ~/netrc

    然后包括以下内容。 *machine github.com

    登录用户名

    密码SECRET

    机器api.github.com

    登录用户名

    密码SECRET*

    你可以在这里包括你的原始密码,但为了安全起见,在这里生成一个授权令牌github token并将其粘贴在密码的位置上。

    Hope this helps someone