【问题标题】:git push hangs after Total line总行后 git push 挂起
【发布时间】:2013-04-05 21:30:11
【问题描述】:

我的 git push 在完成推送后挂起。我要去 git推送

Counting objects: 51, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (47/47), done.
Writing objects: 100% (47/47), 27.64 MiB | 6.47 MiB/s, done.
Total 47 (delta 4), reused 0 (delta 0)

它挂在这里,我必须控制-c 才能返回命令行。过去我已经对这个项目进行了几次提交,没有任何问题。我在我的机器上尝试了其他存储库,它们工作正常。这是怎么回事?

【问题讨论】:

  • 类似“strace -efile -f git push”之类的东西可能会揭示更多关于挂断位置的信息。
  • 远程仓库有什么变化吗?比如安装了一个长时间运行的 post-receive 挂钩?
  • 没有。我正在使用 bitbucket,所以我无法访问所有内容。我开始认为这只是一个需要很长时间的大转会。推送时是否有任何进度指示器?
  • 您推送到的存储库的权限出现问题,或者该位置的磁盘空间不足。我已经看到了这两个问题。还有一个 git gc 可能会有所帮助。
  • 遇到了完全相同的问题:在我的情况下,服务器上的 git 用户不拥有裸仓库 - root 拥有它(忘记了 chown 中的 -R)

标签: git bitbucket


【解决方案1】:

事实证明这完全没有问题。我只需要等到上传完成。我添加了几个大文件,但没有进度指示器。也许其他人会觉得这很有帮助。

【讨论】:

  • 嗯 2kb 文件在我的情况下并不大....互联网连接很棒仍然挂起 arghhhh
  • 这很有帮助。还好我没有打断它:P
  • 我遇到了类似的问题,但 Windows 8 任务管理器中的网络指示器显示 0% 活动...
  • @Pieter - 我得到了完全相同的结果 - 没有明显的网络活动(尽管这是一个很大的推动)但它完成了 OK
  • 这是一个设计得很糟糕的界面,在“完成”之后继续做事而没有用户反馈。
【解决方案2】:

https://git-scm.com/docs/git-config#Documentation/git-config.txt-httppostBuffer

http.postBuffer

将数据发送到远程系统时,智能 HTTP 传输使用的缓冲区的最大大小(以字节为单位)。对于大于这个缓冲区大小的请求,使用 HTTP/1.1 和 Transfer-Encoding: chunked 来避免在本地创建海量的包文件。默认为 1 MiB,足以满足大多数请求。

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

分辨率

  1. 将 Git 缓冲区大小增加到存储库的最大单个文件大小

  2. git config --global http.postBuffer 157286400

  3. ngnix反向代理配置参考Git push fails - client intended to send too large chunked body的解析。将此参数增加到您的存储库的最大单个文件大小。

  4. 按照Can't clone or pull due to a git outbound proxy 中的说明绕过出站代理

【讨论】:

  • 疯了。没有其他解决方案对我有用。我想知道为什么它只是挂起而不是在等待几个小时后打印一条错误消息......
  • git config --global http.postBuffer 157286400 就是答案。在那个数字的末尾少一个0 也可能没问题。
  • 这不是公认的答案吗?这解决了它。
  • 它也对我有用。我将两个存储库合并在一起,我推送的存储库有 500 mb 大。推送挂了,我更新了 postBuffer,再次运行它,它工作并立即推送
  • 是的,这也是为我解决问题的答案。
【解决方案3】:

它可以(正如公认的答案所暗示的)只是等待片刻,但在大多数情况下,它与遥控器上的权限相关联。 虽然在 GitHub、Gitlab 或 Bitbucket 等公共 git 服务上大多不是问题,但自托管 remotes 可能有一个特殊用户或一个访问组。

在新的裸存储库上,更改文件夹是不够的, 但是因为.git-Folder 里面需要递归。

【讨论】:

  • 是的,这完全是我们本地组共享 git repo 的问题。奇怪的是 git 没有给出任何错误或警告。
  • ...之前这样做了一千次...仍然需要阅读您的答案以仔细检查目录内的烫发,谢谢!
【解决方案4】:

它只在我这样做的情况下对我有用 git push -u origin main,当我只是简单地将git push 用于比特桶时,它并没有通过。

【讨论】:

    【解决方案5】:

    等到上传完成对我来说不起作用。 我推了不是很大的文件,但等了足够长的时间,还是挂了。

    对我有帮助的是从 msysgit 1.9.5 更新到 git-for-windows 2.6.2

    【讨论】:

      【解决方案6】:

      在远程机器上的裸仓库的情况下,权限也可能是导致此问题的原因。

      【讨论】:

        【解决方案7】:

        只是想添加这个以防万一它对任何人都有帮助。 我遇到了同样的问题,问题是 git 用户没有权限写入文件,只能读取文件。

        【讨论】:

          【解决方案8】:

          问题是上传文件很大。

          您要么等待它,要么转到您的项目文件夹并删除如果使用 maven,您可以在目标文件夹中找到的所有库。然后进行推送,它会很快发生。

          无论如何,库文件夹不需要存储在 git 中,这只是浪费 git 空间,除非并且直到它们在 maven 存储库中不可用并且您确实需要存储它们

          【讨论】:

          • 对任何人都没有帮助...
          【解决方案9】:

          添加另一个本地提交并重试推送对我有用。

          【讨论】:

            【解决方案10】:

            使用这个命令:

            git remote add origin <url>
            git push -f origin main
            

            【讨论】:

              【解决方案11】:

              查看您是否已暂存但未提交更改。 (git status)

              如果是这样,请提交(或取消暂存)这些内容,然后尝试推送。为我工作。

              【讨论】:

                【解决方案12】:

                就我而言,这是由msysgit 1.9.5 的问题引起的。降级到msysgit 1.9.4 解决了这个问题。

                【讨论】:

                  【解决方案13】:

                  就我而言,遥控器的磁盘已满。删除遥控器上的一些文件很快解决了这个问题。

                  【讨论】:

                    【解决方案14】:

                    检查 git 正在使用的用户权限

                    在我的情况下,我尝试通过 ssh 并且使用的系统用户无法写入 git 裸存储库...

                    Here 是调试 ssh 连接的方法

                    【讨论】:

                      【解决方案15】:

                      此问题可能是由您的 SSH 代理问题引起的。

                      我最近遇到了这个问题,因为我将默认 shell 从 zsh 更改为 bash。我最初使用zsh 设置了我的ssh 密钥,因此默认情况下它们不适用于bash,使用chsh -s /bin/bash

                      要解决此问题,您需要使用与执行您的操作相同的 shell 脚本(bashshzsh 等)将您的 ssh 密钥添加到 SSH 身份验证代理git 命令:

                      eval `ssh-agent`
                      ssh-add ~/.ssh/some_key_rsa
                      

                      您需要输入密钥的密码才能添加它。要将密码存储到您的用户钥匙串中,这样您就不需要在每次使用钥匙时都输入密码,请将带有-K 选项的钥匙添加到ssh-add 命令中。

                      ssh-add -K ~/.ssh/some_key_rsa
                      

                      注意大写K,因为使用小写是不同的命令选项。

                      【讨论】:

                        【解决方案16】:

                        我在推送到 GitHub 时遇到了同样的问题。我发现被推送的文件的一个子集没有被接受。

                        我发现这一点是通过将我的大提交分解成更小的提交(如这个 SO 问题中所述:Break a previous commit into multiple commits),然后在大多数较小的部分中找到成功。

                        问题片段包含图像文件,我仍在整理出哪个特定文件(或多个文件)触发了问题。

                        【讨论】:

                          【解决方案17】:

                          我想将@Fabio 对原始帖子的评论置之不理——这为我解决了这个问题。

                          我正在 Raspberry Pi 上运行我自己的临时本地 git 服务器。我忘了chown 新的裸仓库,从远程 PC 推送第一个提交只会无限期挂起。

                          这修复了它(以 root 身份运行 chown 或使用 sudo):

                          cd /srv/git
                          chown git:git -R <repo_name>.git
                          

                          &lt;repo_name&gt; 替换为您的存储库的名称。

                          【讨论】:

                            【解决方案18】:

                            我遇到了同样的问题,结果发现我有一个旧版本(我删除但名称相同)连接到 Heroku 的 repo。当我断开它时,它完成了推送。

                            【讨论】:

                              【解决方案19】:

                              在我的情况下,Git 托管平台 GitHub 的服务器存在问题,因此请检查您的提供商状态。

                              【讨论】:

                              • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                              【解决方案20】:

                              我最近在尝试推送大约 2MB 的约 40 个文件时遇到了这个问题。 git push --verbose 没有显示任何错误,但会在 Total &lt;...&gt; 写入终端后挂起。

                              我通过 GitHub 重新发布了一个新的 PAT,并且推送按预期进行。

                              【讨论】:

                                【解决方案21】:

                                等了两个多小时后,我的 git push 仍然卡住了。所以,我不得不在提交之前重新设置,因为我不小心上传了一张 3.1mb 的照片(我猜这是冻结的罪魁祸首)。

                                我找到了一个更友好的解决方案,@aroth 在上面分享的 git config --global http.postBuffer 157286400 就是答案。

                                我刚刚打开一个新的 iTerm 窗口运行上述命令,然后在 VSCode 中的终端仍然挂起时运行 git push。然后我ctrl c 关闭了 VSCode 中的终端会话,我又重新开始工作了。

                                谢谢@aroth!

                                【讨论】:

                                  【解决方案22】:

                                  如果您等待的时间足够长,但问题仍然存在,请尝试以下操作:

                                  1 - 使用 CTRL+C(命令 +C)停止进程。

                                  2- 对任何文件进行很小且无效的更改。 (供 git 系统检测新文件是否已修改)。

                                  3- 遵循 git add 和 git commit 步骤并推送您的更改。

                                  git add modified_file
                                  git commit -m "new commit message"
                                  

                                  4- 运行 git push 命令,你会看到它没有任何问题

                                  git push
                                  

                                  【讨论】:

                                  • 添加不必要的提交来解决 git 问题听起来很麻烦
                                  猜你喜欢
                                  • 2013-03-10
                                  • 2013-09-04
                                  • 2012-03-06
                                  • 2015-08-28
                                  • 2018-02-07
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2017-06-04
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多