git push在Total line之后挂起

Pat*_*ick 63 git bitbucket

看似完成推动后,我的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)
Run Code Online (Sandbox Code Playgroud)

它挂在这里,我必须控制-c回到命令行.我曾经在这个项目中做过几次提交,现在有了问题.我在我的机器上尝试了其他回购,它们工作正常.这里发生了什么?

Fai*_*Dae 564

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

http.postBuffer

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

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

解决

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

  2. git config --global http.postBuffer 157286400

  3. 请参阅Git 推送失败 - 客户端打算为 ngnix 反向代理配置发送太大的分块正文的解决方案。将此参数增加到存储库的最大单个文件大小。

  4. 绕过出站代理,如由于 git 出站代理而无法克隆或拉取中所述

  • 答案是“git config --global http.postBuffer 157286400”。也许在该数字末尾少一个“0”也可以。 (121认同)
  • 疯狂的。没有其他解决方案对我有用。我想知道为什么它只是挂起而不是在等待几个小时后打印错误消息...... (38认同)
  • 看起来这很有效。有趣的是,这里有这么多人回答有关网络活动的问题,等等,没有意识到这里有多少人遇到问题,它在没有任何网络活动的情况下挂起几个小时,我可以重复一遍又一遍,然后奇迹般地它又通过了多个时间挂起..非常糟糕的问题,没有错误,没有任何git有如此有缺陷的用户界面,每个人都使用它..奇怪... (5认同)
  • 为什么是 157286400 字节 (150 MiB)? (4认同)
  • 它确实对我也有用。我将两个存储库合并在一起,我推送的存储库有 500 MB 大。推送挂起,我更新了 postBuffer,再次运行它,它立即工作并推送 (3认同)
  • 我已经尝试了 `git gc` **git 和选项 -f** 和 `http.postBuffer 157286400` 仍然不起作用:( (3认同)
  • @aroth 感谢分享 git config --global http.postBuffer 157286400 对我有用 (2认同)
  • 我只需要_Resolution_下的步骤1和2,就解决了问题!换句话说:`git config --global http.postBuffer 10000000`。当然,更多细节在“git config --help”中。 (2认同)

小智 131

尝试:

git gc

我把它挂在同一个地方,但文件很小,所以等待不是答案。解决方案是git gc(垃圾收集)重新计算存储库中的增量。

  • 我的救星!谢谢大家,谢谢@mat! (2认同)

Pat*_*ick 84

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

  • 这是一个设计得很糟糕的界面,在“完成”之后继续做没有用户反馈的事情。 (9认同)
  • 好2kb文件在我的情况下不大....互联网连接是真棒仍然挂起arghhhh (5认同)
  • 我有一个 27 MB 的推送,它已经挂起 24 小时了(我什至没有注意到它不起作用,回到我的计算机上看到“git push”命令仍然挂起)。很困惑。增加“http.postBuffer”的大小,如 Faiz Ahmad Dae 的[下面的答案](/sf/answers/4809793621/) 解决了我的问题。 (5认同)
  • 这很有帮助.好事我没有打断它:P (2认同)
  • 我遇到了类似的问题,但 Windows 8 任务管理器中的网络指示器显示 0% 活动... (2认同)
  • @Pieter - 我得到完全相同的 - 没有明显的网络活动(即使这是一个相当大的推动),但后来它完成了确定 (2认同)

pal*_*ife 21

它只对我有用,当我这样做时 git push -u origin main,当我只是简单地使用git push位桶时,它没有推动。


san*_*uru 13

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

  • 更改 postBuffer 并没有让我越界,但这个却做到了。不能说我根本理解根本问题,但是谢谢! (2认同)

Ali*_*mir 10

可能只是片刻(如已接受的答案所建议),但是在大多数情况下,它与远程服务器上的权限关联。自托管的remote大部分不是公共git服务(例如GitHub,Gitlab或Bitbucket)上的问题,但自托管的remote可能具有特殊用户或一组访问权限。

在新的裸存储库上,不足以更改文件夹,但由于其中包含.git-Folder ,因此需要递归。


小智 10

对我来说,当我切换到 bash 而不是 zsh 终端时,它就起作用了。


Isa*_*ait 8

等了两个多小时后,我的 git Push 仍然卡住了。因此,我必须在提交之前重置,当时我不小心上传了一张 3.1mb 的照片(我猜这是冻结的罪魁祸首)。

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

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

谢谢@aroth!