错误: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 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\<USER_NAME>\.gitconfig
[core]
packedGitLimit = 512m
packedGitWindowSize = 512m
[pack]
deltaCacheSize = 2047m
packSizeLimit = 2047m
windowMemory = 2047m
【讨论】:
【参考方案20】:通常是因为以下原因之一:
-
网速慢。
-
服务器端的小 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 [关闭]
git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining