Git push 花费太长时间

71
当我试图推送到我的远程git仓库时,它需要很长时间,但什么也没有发生。我等了很久,但是推送永远没有完成。我的操作系统是Ubuntu 12.10。谢谢。

6
你能手动浏览 Github 吗?你是否在代理后面?当你添加“--verbose”时会发生什么?我们需要更多信息来帮助你。 - phisch
是的,我能够做其他所有事情,如拉取、获取、本地提交和浏览Github。唯一的问题是推送时出现了问题。它从来没有成功过,我等了很久很多次。有时会出现“无快进”错误,但当我从存储库中拉取以解决它时,再次推送时就会一直进行但永远不会结束。 - Codeformer
1
“永远”有多长? - Waleed Khan
12
@WaleedKhan ∞ 秒。 :-) - James M
@mvp 仓库大小为200MB,但最近的提交很小。我正在使用https。 - Codeformer
显示剩余3条评论
14个回答

75

尝试使用--verbose选项查看实际发生的情况。即使你只做了小的更改,一些内部事务可能会导致git推送更多的数据。

查看git gc。它可以清理你的本地仓库,并可能加快速度,具体取决于你的问题。强烈建议备份。


3
这甚至没有给我任何IPv6问题的输出。对于我来说,"git push --ipv4 <remote>" 解决了这个问题。 - jaques-sam

17

我曾有过同样的问题。如果您正在使用 Bitbucket.org,不知道为什么,但禁用 IPV6 连接可以解决这个问题。


1
你是如何禁用IPV6的? - Fernando Santiago
这将取决于您所使用的操作系统。在Ubuntu中,使用用户界面,它应该是:设置 > 网络 > IPv6选项卡 > 关闭。但还有其他方法。 - Felipe Desiderati
谢谢!这可能与某些路由器配置阻止特定的IPv6流量或甚至本地互联网服务提供商阻止它有关。 如果您不需要使用任何IPv6服务,禁用它将使其正常工作(在Ubuntu上,请确保通过/etc/sysctl.conf禁用它)。 如果您需要IPv6,则通过将以下内容添加到您的主机文件中,强制您的PC使用bitbucket的IPv4: 104.192.143.3 bitbucket.org - vinitius
3
我几乎遇到了同样的问题。在我的情况下,它是通过 Plesk 的 Git 功能托管的 git 存储库。 您可以强制 git 使用 IPv4(至少在 2022 年 :)),而不是完全禁用 IPv6。例如,在 push 时: git push --ipv4 your-remote git push --ipv6 your-remote编辑问题被阻止了,因为“Stack Overflow 上有太多待处理的编辑。请稍后再试。”... - Eddie
同样适用于GitHub。 - Chaitanya Bankanhal

8

确保使用正确的协议。

根据您本地配置的设置方式,可能需要使用 https 进行连接。为此,请将远程存储库的协议从 git@github.com:[user]/[repo] 协议切换到 https://github.com/[user]/[repo].git 协议。

如果无法使用 https 协议,尝试反过来也是值得的。在旧版配置中,旧版的 git@github 用户身份验证通常会作为后备选项允许您进行连接。


今天这个方法又对我起作用了。但是切换到 git@github 协议才是解决问题的关键。对我来说,可能与我使用的 Git 客户端 GitExtensions 上的一些配置选项有关。 - Tony Brasunas
1
我把我的远程连接方式从https改为ssh后,出现了这个问题。我又回到https,现在可以正常工作了。 - Ranvir

7

4

确保您已通过身份验证登入Github:对我来说,我的身份验证是问题所在。我在Windows上使用git bash运行命令时,由于某些原因它没有提示我进行身份验证。当我在命令提示符下运行它时,我得到了以下结果:

Select an authentication method for 'https://github.com/':
1. Web browser (default)
2. Personal access token
option (enter for default):

在我成功验证后,它运行良好


2
请检查远程目录的权限。在我的情况下,通过 chown -R user.group /dir 设置正确的权限后,提交就能成功完成:最初的回答
$ git push --verbose
Pushing to ssh://user@domain.zone:port/dir
user@domain.zone's password:
Counting objects: ...
...
Total 123 (delta 21), reused 16 (delta 12)
To ssh://domain.zone:port/dir
 * [new branch]      master -> master
updating local tracking ref 'refs/remotes/origin/master'

1
我遇到了这个问题,解决办法就是切换到一个新的分支,然后使用命令:git push origin 后来我发现问题是因为我总是在合并后删除分支,但仍然尝试在本地推送到那些已删除的分支。希望这对面临同样问题的人有所帮助。

1
感谢您对Stack Overflow社区做出贡献的兴趣。这个问题已经有了相当多的答案,其中一个答案已经得到社区的广泛验证。您确定您的方法之前没有被提到过吗?如果是这样的话,解释一下您的方法与众不同的地方,以及在什么情况下您的方法可能更好,或者为什么您认为之前的答案不够满意,这将非常有帮助。您能否友好地编辑您的答案并提供解释? - undefined

1

1
每次我重新安装或升级Ubuntu(大约3-4次),我都需要进入我的Internet连接的DNS设置(以太网和Wifi都要),删除“自动”并添加“8.8.8.8”和“1.1.1.1”。重置后,git push和所有其他访问git-origin的命令从1分钟降至几秒钟。

1

对于那些克隆代码库并将其推送到新的远程存储库的人 -

如果您从CLI(非fork)开始新项目并克隆了一个存储库,当您将其推送到空白的远程存储库时,您会推送整个项目历史记录。这需要一些时间。如果您只需要克隆作为它所在的状态,并且不需要历史记录,请在克隆后删除.git目录,然后使用git init重新初始化本地仓库,并将其推送到新的远程存储库。应该很快推送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接