【问题标题】:error: RPC failed; curl transfer closed with outstanding read data remaining错误:RPC 失败; curl 传输关闭,剩余未完成的读取数据
【发布时间】: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

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

【问题讨论】:

    标签: git gitlab


    【解决方案1】:

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

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

    声明为

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

    然后通过命令克隆:

    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://stackoverflow.com/a/38703069/2481602

            终于用上了

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

            最终解决https://stackoverflow.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】:

                    可能是两个原因

                    1. 互联网很慢(我的情况就是这样)
                    2. 缓冲区大小较小,在这种情况下您可以运行命令 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】:

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

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

                              我是怎么解决的?

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

                              完成了。

                              提示

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

                              希望对你有帮助。

                              【讨论】:

                                【解决方案24】:

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

                                【讨论】:

                                  猜你喜欢
                                  • 2021-04-09
                                  • 2021-04-21
                                  • 2020-07-07
                                  • 2019-09-13
                                  • 2021-01-03
                                  • 2010-12-18
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多