当向Github推送时,Git push卡住了?

185
每次我尝试推送到GitHub时,Git push都会挂起。我正在使用Cygwin和Windows 7。Git在本地跟踪分支、提供状态、设置全局用户名称和用户电子邮件以及允许提交等方面都很正常。我还是新手,正在学习。
我输入"git push"、"git push origin master"或"git push -u origin master",但什么也没有,只有一个空白行需要我使用ctl-c才能回到提示符。
"ssh-keygen -t rsa -C 'me@example.com'"要求我输入文件名并挂起。
"git push heroku master"也挂起了。
"$ git status"返回"On branch master nothing to commit, working directory clean"。
"$ git pull"返回"Already up to date"。
"$ git remote -v"返回:
heroku  git@heroku.com:myherokusite.git (fetch)

heroku  git@heroku.com:myherokusite.git (push) origin  

https://github.com/gitusername/appname.git (fetch) origin  

https://github.com/gitusername/appname.git (push)

or the correct ssh remote settings are returned when trying this with ssh

更新:使用SSH URL git@github.com:gitusername/gitrepo.git 也会卡住。

git remote set-url origin https://github.com/gitusername/appname.git 是正确的。

更新:我可以看到在卡住时Windows任务管理器中运行的git进程。

我尝试过:

使用不同的互联网连接位置

在https和ssh之间切换,但都会卡住

卸载git。从https://code.google.com/p/msysgit/downloads/list重新安装

卸载git。安装Cygwin的git

卸载git。安装Github for Windows GUI应用程序,我能够推送。但是这个应用程序功能有限,迫使我离开Cygwin窗口进入另一个应用程序,然后迫使我进入Windows命令提示符以获取完整功能,而我原本以为已经通过使用Cygwin逃脱了这种情况。

花费了很多很多时间来解决这个问题,在此之前它一直没有出现过,谢谢。

2014年4月更新:我重建了整个机器Win 7,Cygwin等,现在一切都正常了。


5
你是否在防火墙或代理后面? - Guillaume Darmont
我尝试了不同的互联网连接,但都没有成功,是的,我有杀毒软件,之前从未出现过问题。没有代理。 - Matt Singer
6
有运气吗?我正在使用cygwin时遇到了同样的问题。解决方法:如果我使用本地的Windows shell (cmd.exe),git push origin master 就可以正常工作。 - skilbjo
6
重启电脑对我有帮助。 - ktamas
3
我必须注销VPN。 - 42n4
显示剩余5条评论
39个回答

187

重新启动您的ssh代理!

killall ssh-agent; eval `ssh-agent`

6
当我的终端无法响应时,这种方法对我也很有效。 - colmjude
4
这个对我有用。在 Mac 终端列出 Enumerating... Counting... Writing... Total... 后会挂起,但是运行 "killall" 命令可以解决问题。 - Dave Pritlove
2
这就是它! - rufatZZ
12
2022 年了,它仍能正常工作! - aRyhan
2
这就是它!!! - huxnet
显示剩余7条评论

92
git config --global core.askpass "git-gui--askpass"

这对我很有效。可能需要3-5秒才会出现提示,只需输入您的登录凭据即可开始使用。


1
我运行了这个程序,现在它一直显示“错误:无法运行git-gui--askpass:没有这样的文件或目录”,你能告诉我如何撤销这个操作吗? - hello_there_andy
2
@hello_there_andy 这可能会对你有所帮助。这里 - markphd
30
这行代码对我没有任何效果。输出为空。 - AlwaysLearning
2
运行这行代码后,问题并没有解决,现在在推送时,git 一直报错 error: cannot run git-gui--askpass: No such file or directory。@forloop 添加的解决方案帮助我将其反转。 - Sebasthian Ogalde
3
对我来说完全正常工作。我甚至不需要输入任何凭据。 - Flip
如果仅在命令行上使用git(例如通过远程SSH),我预计此解决方案不适用。 - pd_au

50

尝试创建像~/sshv.sh这样的脚本,它将向您展示ssh正在做什么:

#!/bin/bash
ssh -vvv "$@"

允许文件所有者执行~/sshv.sh文件:

chmod u+x ~/sshv.sh

然后使用以下命令执行 git push

GIT_SSH=~/sshv.sh git push ...

在我的情况下,这帮助我找出我正在使用需要关闭的ssh共享连接,因此我杀死了那些ssh进程,然后它开始运作。


9
为了调试,将LogLevel DEBUG3添加到~/.ssh/config中会更简单。 - Jérémie Lesage
1
我尝试了 git push -u origin master --verbose,但是即使这样也没有显示任何有用的信息。在阅读了此解决方案后,我将整个 ~/.ssh 从我的旧 Linux 电脑复制到了我的 Windows Cygwin64 home/user 文件夹中,非常顺利。 - Matteljay
谢谢。在我的情况下,只需重新启动sshd即可: sudo systemctl restart sshd - Albert Mosiałek
添加 logLevel Debug3 后,需要重新加载 ssh 吗?我认为不需要,因为是客户端的原因。 - Timo
这是一个好的提示:我只需执行 ps aux | grep ssh 然后杀掉任何出现的进程。之后推送就可以正常工作了! - sh37211
显示剩余2条评论

45
尝试使用GIT_CURL_VERBOSE=1 git push命令。你的问题可能由于代理设置引起,例如如果git尝试通过代理服务器访问github.com并且代理不响应。使用GIT_CURL_VERBOSE=1将显示目标IP地址和一些信息。您可以将此IP地址与命令输出进行比较: host www.github.com。如果这些IP不同,则可以设置https_proxy = ""并重试。

1
那就是我的问题,非常感谢!在断开 VPN 后,我成功地进行了推送。 - stasdeep

30

我曾经遇到过完全相同症状的问题……我几乎想放弃并重建整个系统)). 我还尝试了 git config --global core.askpass "git-gui--askpass",但没有用。

解决方案是重新启动ssh-agent:

launchctl stop /System/Library/LaunchAgents/org.openbsd.ssh-agent 

launchctl start /System/Library/LaunchAgents/org.openbsd.ssh-agent

如有需要,请在前面加上sudo


5
在Linux系统中,您可以通过运行以下命令来重启ssh-agent:eval "$(ssh-agent -s)"这将杀死当前的ssh代理进程并启动一个新的。 - Yan King Yin
我通过终止ssh-agent.exe进程重新启动了ssh-agent。在Windows上,您可以使用ps -ef | grep ssh来找到它,并使用kill来终止它。重新启动可能更安全。@YanKingYin - ashes999
3
@Yan King Yin,我不确定Linux是否可行,但在Mac上,我已经使用LaunchControl GUI或运行以下命令来完成:sudo launchctl stop /System/Library/LaunchAgents/org.openbsd.ssh-agentsudo launchctl start /System/Library/LaunchAgents/org.openbsd.ssh-agent... 我相信Linux应该有类似于BSD Launchd的东西,比如通过init-v或systemd方式停止/启动代理/守护程序。你可以尝试这个命令:killall ssh-agent; eval $(ssh-agent)。如果成功了,请告诉我。 - Drew
谢谢,我遇到了这个问题,原来是我的ssh代理挂起了!如果不是你的帮助,我可能要花很长时间才能自己解决它。 - Martin DeMello
这对我有效,但我必须在每次推送之前运行这两个命令。 - Ray Jennings
在我的 Mac 上,我需要使用以下命令: launchctl stop /System/Library/LaunchAgents/com.openssh.ssh-agent.plist launchctl start /System/Library/LaunchAgents/com.openssh.ssh-agent.plist - Peter Svehla

26
  1. 我曾经遇到过相同的问题。有点困惑的是,我在根目录下进行了一个git init --bare, 这意味着你没有任何权限所以你无法push。相反地,请新建一个用户或使用我的方式,我用了Pi User,并在那里进行了git init --bare,然后它就可以工作了。

  2. git config --global http.postBuffer 524288000

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


3
我最终只为本地仓库设置了缓冲区,但这解决了我的问题 git config --local http.postBuffer 524288000 - user212514
3
非常感谢!如果有人在使用较大的代码库(例如单体库)时遇到此问题,请首先尝试此解决方案。 - zeekrey
1
这对于我的包含大文件的仓库有效,我添加了几个大小在5到20MB之间的mp3文件。我刚刚更新了本地仓库的配置。 - B Rad C

22
在我的情况下,问题在于似乎不再支持https,因此我不得不将所有起源从旧的https://github.com/username/myrepo切换到git@github.com:username/myrepo.git。 我使用下面的命令完成了这个过程:
git remote set-url origin git@github.com:username/myrepo.git

1
那就是我要的。 - Jomy

22

对于最初的推送,我使用“命令提示符”(cmd)代替git bash解决了卡顿问题。从那时起,我一直使用git bash没有任何问题。


我没想到这会起作用!谢谢你的提示。 - Keshav Gupta
哦,我的天啊...这个起作用了。我没想到会这样。 - devnull69
对我来说有效。我以前认为我已经使用过Git Bash而没有问题,但也许不是——甚至不能在其中复制/粘贴——我用的是Windows。我曾经使用过UnxTools(拼写正确)。 - Peter Smith

12

我遇到过同样的问题。 不必担心和寻找无尽的复杂解决方案, 只需要删除 Git 并重新安装即可。

sudo apt-get purge git
sudo apt-get autoremove
sudo apt-get install git

就是这样。现在应该可以正常工作了。


2
这应该就是答案了,我正在使用Ubuntu 20(您发表评论已经两年了),并且遇到了同样的问题。我已经重新安装了它,现在它可以工作了。 - thienkhoi tran
2
这在Ubuntu 20.04上运行良好,谢谢@gustavz。 - Kushan Gunasekera
如果您以前使用过已保存的密码短语,则必须再次保存它: ssh-agent bash && ssh-add - CyberT33N
我尝试了这个,但没有改变,顺便说一下,是通过WSL在Ubuntu 22.04上进行的。 - Stacker Lee

12

我在Mac上遇到了这个问题。我的解决方法是使用以下命令终止所有git进程:

killall git

希望这能对某人有所帮助!


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - コリン
2
这对我有用。我花了一个小时试图弄清楚问题出在哪里。我猜是 git 进程卡住了。非常感谢。 - Babao

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