快速解决方案:
对于这种错误,我通常首先提高postBuffer
尺寸依据:
git config --global http.postBuffer 524288000
(下面的一些评论报告必须将值加倍):
git config --global http.postBuffer 1048576000
(For npm publish
, 马丁·布劳恩 https://stackoverflow.com/users/1540350/martin-braun报告在评论中 https://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#comment113682102_6849424将其设置为不超过 50 000 000,而不是默认的 1 000 000)
更多信息:
来自git config手册页 https://git-scm.com/docs/git-config#Documentation/git-config.txt-httppostBuffer, http.postBuffer
是关于:
将数据 POST 到远程系统时,智能 HTTP 传输使用的缓冲区的最大大小(以字节为单位)。
对于大于此缓冲区大小的请求,HTTP/1.1 和Transfer-Encoding: chunked
用于避免在本地创建大量包文件。默认值为 1 MiB,足以满足大多数请求。
即使对于克隆人来说,这也会产生影响,在这种情况下,OP Joe https://stackoverflow.com/users/136088/joe报告:
[克隆] 现在工作正常
注意:如果服务器端出现问题,并且服务器使用 Git 2.5+(2015 年第 2 季度),错误消息可能会更明确。
See "Git克隆:远程端意外挂断,尝试更改postBuffer但仍然失败 https://stackoverflow.com/a/30696906/6309".
Kulai https://stackoverflow.com/users/1538225/kulai (在评论中 https://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning/6849424#comment52420161_6849424) 指出此 Atlassian Git 故障排除页面 https://confluence.atlassian.com/pages/viewpage.action?pageId=693897332,其中添加:
Error code 56
表示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 commit 7a2dc95 https://github.com/git/git/commit/7a2dc95cbc25b4b82cff35931f69f8a5aafeb878, commit 1b13e90 https://github.com/git/git/commit/1b13e9032f039c8cdb1994dd092ff2ed32af5cf5 (22 Jan 2020) by brian m. carlson (bk2204) https://github.com/bk2204.
(Merged by Junio C Hamano -- gitster -- https://github.com/gitster in commit 53a8329 https://github.com/git/git/commit/53a83299c7cf7d101342400a6fcc6ba7650e3612, 30 Jan 2020)
(Git Mailing list discussion https://public-inbox.org/git/20200122034543.18927-1-sandals@crustytoothpaste.net/T/#u)
docs https://github.com/git/git/commit/7a2dc95cbc25b4b82cff35931f69f8a5aafeb878: 增加 http.postBuffer 有价值时提及
Signed-off-by: brian m. carlson
用户在各种情况下都会遇到 HTTP 推送问题。
这些问题通常是由于防病毒软件、过滤代理或其他中间人情况造成的;有时,它们是由于网络的不可靠性造成的。
不过网上找到的解决HTTP推送问题的常见方法是增加http.postBuffer。
这对上述任何情况都不起作用,并且仅在少数、高度受限的情况下有用:本质上,当连接不能正确支持 HTTP/1.1 时。
记录何时提高此值是适当的以及它实际的作用,并阻止人们将其用作推送问题的通用解决方案,因为它在那里无效。
所以文档git config http.postBuffer https://github.com/git/git/blob/7a2dc95cbc25b4b82cff35931f69f8a5aafeb878/Documentation/config/http.txt#L195-L209现在包括:
http.postBuffer
将数据 POST 到远程系统时,智能 HTTP 传输使用的缓冲区的最大大小(以字节为单位)。
对于大于此缓冲区大小的请求,将使用 HTTP/1.1 和 Transfer-Encoding: chunked 来避免在本地创建大量包文件。
默认值为 1 MiB,足以满足大多数请求。
请注意,提高此限制仅对禁用分块传输编码有效,因此仅应在远程服务器或代理仅支持 HTTP/1.0 或不符合 HTTP 标准的情况下使用。
一般来说,提高这个值并不是解决大多数推送问题的有效解决方案,但会显着增加内存消耗,因为即使是小推送也会分配整个缓冲区.