Git push 挂起在 Total line 之后

我的 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 返回到命令行。我在过去已经提交了几个与这个项目没有问题。我已经尝试了其他回购我的机器,他们的工作正常。这是怎么回事?

65940 次浏览

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

只有在我做的时候才对我有用 当我只是简单地使用 git push作为位桶时,它并没有推通。

看看您是否已经进行了分阶段的更改,但是没有提交更改

如果是这样,提交(或卸载)这些,然后尝试推动。我的工作。

在我的案例中,这是由于 msysgit 1.9.5的一个问题引起的。降级到 msysgit 1.9.4解决了这个问题。

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

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

它可以(正如可接受的答案所建议的那样)只需等待一会儿,但在大多数情况下,它都链接到远程权限。 虽然对于 GitHub、 Gitlab 或 Bitbucket 等公共 git 服务来说,大多数情况下不存在问题,但自托管的 遥控器可能有一个特殊用户或一个用于访问的组。

在新的裸仓库中,仅仅改变文件夹是不够的, 而是需要递归,因为内部的 .git-文件夹。

在我的情况下,远程有一个完整的磁盘。删除远程上的一些文件立即修复了这个问题。

检查一下 git 正在使用的 用户权利

在我的例子中,我通过 ssh 进行了尝试,使用过的系统用户无法写入 git 裸库..。

这里 介绍如何调试 ssh 连接

我只是想加上这个,以防对谁有帮助。 我遇到了同样的问题,问题是 git 用户没有权限写入文件,只能读取它们。

在远程计算机上的空回购的情况下,权限也可能导致这种情况。

问题是上传文件很大。

要么等待结束,要么进入项目文件夹,删除目标文件夹中的所有库(如果使用 maven 的话)。然后推,它会很快发生。

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

此问题可能由 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,因为使用小写是另一个命令选项。

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

我是通过将大的提交分解为小的提交(如这个 SO 问题: 将前一次提交分解为多次提交中所描述的) ,然后在大多数小的提交中找到成功的方法来发现这一点的。

问题部分包含图像文件,我仍然在排序哪个特定的文件(或文件)触发问题。

我想把@Fabio 的评论附加到最初的帖子上——这为我解决了问题。

我在 Raspberry Pi 上运行我自己的本地 git 服务器。我忘记了 chown新的裸回购,并推第一次提交从远程 PC 将只是挂起无限期。

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

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

用回购的名称替换 <repo_name>

添加另一个本地提交和重试 push 对我来说很有用。

我也遇到过同样的问题,结果发现我有一个与 Heroku 有关的回购协议的旧版本(我删除了这个版本,但使用了相同的名称)。当我断开连接时,它完成了推动。

使用以下命令:

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

Https://git-scm.com/docs/git-config#documentation/git-config.txt-httppostbuffer

Http://postBuffer

将数据 POST 到远程系统时,智能 HTTP 传输使用的缓冲区的最大字节数。对于大于这个缓冲区大小的请求,HTTP/1.1和 Transfer-Encoding: chunked 用于避免在本地创建大量包文件。默认值是1MiB,这对于大多数请求来说已经足够了。

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

决心

  1. 将 Git 缓冲区大小增加到回购文件的最大单个文件大小

  2. Git config —— global http.postBuffer 157286400

  3. 关于 ngnix 反向代理配置,请参考 Git 推送失败-客户端打算发送过大的块状主体的分辨率。将此参数增加到回购文件的最大单个文件大小。

  4. 绕过出站代理,正如 < a href = “ https://confluence.atlassian.com/bitbucket etserverkb/can-t-clone-or-pull-due-to-a-git-outbound-xy-779171769.html”rel = “ norefrer”> 不能克隆或者由于 git 出站代理而拉

我最近尝试推送大约2MB 的40个文件时得到了这个结果。git push --verbose没有显示任何错误,只是在 Total <...>被写入终端之后挂起。

我通过 GitHub 重新发布了一个新的 PAT,推送过程如我所料。

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

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

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

谢谢你@aroth!

在我的案例中,Git 托管平台 GitHub 的服务器有问题,所以也要检查你的提供商状态。

对我来说,我已经安装了比特防御,这是导致问题。卸载它,一切都很好

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

我尝试了上面提出的所有答案,但没有一个对我有用。出于某种原因,这种情况只发生在我试图推到“主人”。当我创建并推送到“ main”分支时,它工作得很好。

试试:

git gc

我把它挂在同一个地方,但文件非常小,所以等待不是答案。解决方案是使用 git gc(垃圾收集)来重新计算回购中的增量。

我也有同样的问题,通过运行这个命令就修复了。

git config --global sendpack.sideband false