错误:RPC 失败; curl 传输关闭,剩余未完成的读取数据

Posted

技术标签:

【中文标题】错误:RPC 失败; curl 传输关闭,剩余未完成的读取数据【英文标题】:error: RPC failed; curl transfer closed with outstanding read data remaining 【发布时间】:2016-12-01 19:32:01 【问题描述】:

当我尝试从 GitLab (GitLab 6.6.2 4ef8369) 克隆存储库时遇到此错误:

remote: Counting objects: 66352, done.
remote: Compressing objects: 100% (10417/10417), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

然后克隆被中止。我怎样才能避免这种情况?

【问题讨论】:

【参考方案1】:

几天后,今天我刚刚解决了这个问题。生成 ssh 密钥,看这篇文章:

https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

声明为

    Git 提供程序(我正在使用的 GitLab,GitHub)。 将此添加到本地身份。

然后通过命令克隆:

git clone username@mydomain.com:my_group/my_repository.git

并且没有发生错误。

以上问题

错误:RPC 失败; curl 18 传输因未完成的读取数据而关闭 剩余

因为HTTP协议克隆时出错(curl命令)。

而且,您应该增加缓冲区大小:

git config --global http.postBuffer 524288000

【讨论】:

从 HTTP 更改为 SSH 对我有用。配置http.postBuffer 不起作用。 如果错误仍然存​​在,您应该编辑您的 ssh 配置文件 vi /users/username/.ssh/config 并添加 serverAliveInterval 120 并使用 wq 退出 vi(保存并退出)。这实际上可以防止服务器超时和连接中断错误。 这很好,但有人知道为什么 100% 克隆会发生这种情况吗? 更改 http.postBuffer 为我工作 - 谢谢! 当心:我在提升 postBuffer 时遇到了 npm publish 的几个问题。当我将其设置为 50000000 时,问题就消失了。顺便说一下,默认值为 1000000。【参考方案2】:

在我这里发生这个问题是因为代理配置。我在代理异常中添加了 ip git 服务器。 git服务器是本地的,但是no_proxy环境变量设置不正确。

我使用这个命令来识别问题:

#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 服务器是现货不应该通过代理。 但真正的问题是代理规则定义的文件大小

【讨论】:

【参考方案3】:

如上所述,首先从 bash 运行 git 命令,在开头添加增强的日志指令:GIT_TRACE=1 GIT_CURL_VERBOSE=1 git ...

例如GIT_CURL_VERBOSE=1 GIT_TRACE=1 git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin 这将显示详细的错误信息。

【讨论】:

【参考方案4】:

这种情况经常发生,我的互联网连接速度很慢,我必须克隆一个相当大的 git 存储库。最常见的问题是连接关闭,整个克隆被取消。

Cloning into 'large-repository'...
remote: Counting objects: 20248, done.
remote: Compressing objects: 100% (10204/10204), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining 
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

经过大量试验和错误以及很多“远程终端意外挂断”后,我找到了适合我的方法。这个想法是先做一个浅层克隆,然后用它的历史更新存储库。

$ git clone http://github.com/large-repository --depth 1
$ cd large-repository
$ git fetch --unshallow

【讨论】:

这是描述问题解决方法的唯一答案,无需切换到 SSH。这对我有用,谢谢! 这里的关键是--depth 1--unshallow。这也适用于在慢速连接上获取现有 repo:git fetch --depth 1 然后git fetch --unshallow 现在,git fetch --unshallow 命令给出RPC failed; 错误 对我不起作用。在 git fetch --unshallow 上失败。猜猜我的回购对于这种方法来说太大了。只有 SSH 有效。 如果git fetch --unshallow 仍然报错,你可以使用git fetch --depth=100 然后git fetch --depth=200 然后git fetch --depth=300 等等来增量获取repo。这种方式适用于非常大的 Linux 内核存储库。【参考方案5】:

当我尝试从遥控器克隆时,反复遇到同样的问题:

remote: Counting objects: 182, done.
remote: Compressing objects: 100% (149/149), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

最后这对我有用:

git clone https://username@bitbucket.org/repositoryName.git --depth 1

【讨论】:

--depth 1 做了什么 如果源存储库是完整的,则将浅存储库转换为完整存储库,消除浅存储库施加的所有限制。如果源存储库很浅,请尽可能多地获取,以便当前存储库与源存储库具有相同的历史记录。 但我不想clone,我想push。我怎样才能做到有深度【参考方案6】:

试试这个

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup

这对我有用.. capture.png

【讨论】:

由于网络不可靠,该错误是零星的。这里提出的解决方案实际上并没有解决问题。在您再次尝试克隆时,网络恰好更可靠。【参考方案7】:

更改 git clone 协议以尝试。

例如,当“git clone https://xxxxxxxxxxxxxxx”时发生此错误

你可以试试“git clone git://xxxxxxxxxxxxxx”,也许可以。

【讨论】:

【参考方案8】:

简单的解决方案:与其通过 https 克隆,不如通过 ssh 克隆。

例如:

git clone https://github.com/vaibhavjain2/xxx.git - Avoid
git clone git@github.com:vaibhavjain2/xxx.git - Correct

【讨论】:

是的。我是 Windows 用户。【参考方案9】:

这些步骤对我有用:

cd [dir]
git init
git clone [your Repository Url]

我希望这也对你有用。

【讨论】:

【参考方案10】:

网络连接问题。 可能是由于持久连接超时。 最好的办法是换个网络。

【讨论】:

更改了 wifi 以获得更快的互联网连接然后它工作了,感谢您节省了我的时间。【参考方案11】:

这些步骤对我有用:使用 git:// 而不是 https://

【讨论】:

实际上,这个答案比这个线程中的下一个答案更具体..【参考方案12】:

在这里尝试了所有答案。 我正在尝试将 cocoapods 添加到我的机器上。

我没有 SSH 密钥,所以谢谢@Do Nhu Vy

https://***.com/a/38703069/2481602

终于用上了

git clone https://git.coding.net/CocoaPods/Specs.git ~/.cocoapods/repos/master

最终解决https://***.com/a/50959034/2481602发现的问题

【讨论】:

【参考方案13】:

对我来说,问题是连接在整个克隆完成之前关闭。我使用以太网而不是 wifi 连接。然后它为我解决了

【讨论】:

【参考方案14】:

此错误似乎更常见于互联网连接缓慢或出现问题的情况。我已经连接到良好的互联网速度,然后它工作得很好。

【讨论】:

【参考方案15】:

你需要关闭压缩:

git config --global core.compression 0

那么你需要使用浅克隆

git clone --depth=1 <url>

那么最重要的一步就是 cd 进入你的克隆项目

cd <shallow cloned project dir>

现在逐步解开克隆

git fetch --depth=N, with increasing N

例如。

git fetch --depth=4

那么,

git fetch --depth=100

那么,

git fetch --depth=500

你可以通过替换这个N来选择你想要多少步,

最后使用

下载所有剩余的修订版
git fetch --unshallow 

如果对你有帮助,请点赞:)

【讨论】:

这是唯一对我有用的选项。在我的情况下,错误发生在: git clone --depth=1 但是,根据您的指示,我首先执行了: git config --global core.compression 0 然后所有以下步骤,一切都很好! PS:我的网络连接很好,只是今天表现很奇怪。谢谢! 你能详细说明禁用压缩有什么帮助吗? @Slim 我们在这里所做的是禁用压缩完整对象然后获取的默认行为。相反,我们在不压缩的情况下获取,这允许我们通过指定深度来逐步获取。【参考方案16】:

当您遇到代理问题或网络缓慢时,就会出现此问题。您可以选择深度解决方案或

git fetch --all  or git clone 

    

如果出现 curl 56 Recv failure 错误,则通过 zip 或 指定分支的名称而不是 --all

git fetch origin BranchName 

【讨论】:

使用git fetch origin BranchName 我能够继续中断的git clone。谢谢。【参考方案17】:

克隆大型存储库时通常会出现此问题。如果 git clone http://github.com/large-repository --depth 1 在 windows cmd 上不起作用。尝试在 windows powershell 中运行命令。

【讨论】:

【参考方案18】:

可能是两个原因

    互联网很慢(我的情况就是这样) 缓冲区大小较小,在这种情况下您可以运行命令 git config --global http.postBuffer 524288000

【讨论】:

【参考方案19】:

对我来说有效的是,因为 git 的内存要求可能会发生此错误。我已将这些行添加到 $USER_HOME 中存在的全局 git 配置文件 .gitconfig 中,即C:\Users\&lt;USER_NAME&gt;\.gitconfig

[core] 
packedGitLimit = 512m 
packedGitWindowSize = 512m 
[pack] 
deltaCacheSize = 2047m 
packSizeLimit = 2047m 
windowMemory = 2047m

【讨论】:

【参考方案20】:

通常是因为以下原因之一:

    网速慢。
在许多情况下,切换到具有稳定网络连接的 LAN 电缆会有所帮助。获取时避免执行任何并行网络密集型任务。
    服务器端的小 TCP/IP 连接超时,从您尝试获取的位置。
您无能为力。您所能做的就是请求您的系统管理员或 CI/CD 团队负责增加 TCP/IP 超时并等待。
    服务器负载过重。
由于工作时间服务器负载过重,下载大文件可能会经常失败。开始下载后离开您的机器过夜。
    客户端计算机上的小 HTTPS 缓冲区。
增加发布和请求的缓冲区大小可能会有所帮助,但不能保证

git config --global http.postBuffer 524288000

git config --global http.maxRequestBuffer 524288000

git config --global core.compression 0

【讨论】:

【参考方案21】:

这个问题100%解决了。我遇到了这个问题,我的项目经理更改了 repo 名称,但我使用的是旧的 repo 名称。

Engineer@-Engi64 /g/xampp/htdocs/hospitality
$ git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repo/cms
Cloning into 'cms'...
remote: Counting objects: 10647, done.
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

我是如何解决这个问题的。回购链接无效,所以这就是我面临这个问题的原因。克隆前请检查您的 repo 链接。

【讨论】:

【参考方案22】:

这对我有用

export GIT_TRACE_PACKET=1
export GIT_TRACE=1
export GIT_CURL_VERBOSE=1

【讨论】:

【参考方案23】:

我在将一些代码推送到 Github 时遇到了同样的问题。

我尝试了git config --global http.postBuffer 524288000,但它对我不起作用。

原因

这是因为您的提交历史记录和/或任何文件较大。

我的情况

就我而言,是 package-lock.json 导致了问题。 它有 1500+KB 大小和 33K 行代码

我是怎么解决的?

    我提交并推送了所有内容没有 package-lock.json 复制 package-lock.json的内容。 GitHub 存储库页面创建了一个名为 package-lock.json 的新文件 粘贴 package-lock.json的内容并提交。 git pull 在本地。

完成了。

提示

保持每个提交大小更小 频繁推送 使用良好的互联网连接

希望对你有帮助。

【讨论】:

【参考方案24】:

我也面临这个问题。解决它。 问题是互联网连接速度慢。请检查您的互联网连接。 我已经连接到良好的互联网速度,然后它工作得很好。希望对你有所帮助。

【讨论】:

以上是关于错误:RPC 失败; curl 传输关闭,剩余未完成的读取数据的主要内容,如果未能解决你的问题,请参考以下文章

GitHub 错误:RPC 失败; curl 92 http/2 流 0 未完全关闭:CANCEL (err 8) | send-pack:读取边带时意外断开连接

Heroku 部署时出错。错误:RPC 失败; HTTP 504 curl 22 请求的 URL 返回错误:504

RPC 失败; HTTP 400 curl 22 The requested URL returned error: 400 Bad Request

git push 错误:RPC 失败;结果 = 56,HTTP 代码 = 0 [关闭]

libcurl传输错误,错误码180

git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining