Git pull / push / clone并不起作用,但SSH和git status / diff确实有效

时间:2014-07-21 10:50:48

标签: git ssh

几天前,在没有故意改变任何事情的情况下,我的git停止了工作。

我可以运行git statusgit diff哪个工作正常,我可以ssh到我们的git服务器,但如果我运行任何git pull|push|fetch|clone,它只会挂起并且什么也不做。我的网络连接很好,我已经让它运行~1.5小时试图克隆一个非常小的回购。根本没有输出,它什么也没做。

没有人对他们的git有任何问题,所以我很困惑。

非常感谢任何帮助。

编辑

Local:git version 1.8.3.2

git remote -v:显示2组2 git repo位置(获取/推送的原点和上游)。所有这些形式:origin | upstream git@foo.bar.com:repo_path.git(fetch | push)

本地平台:Linux(Ubuntu 13.10)

ssh -T git@foo.bar.com需要一段时间后会产生:Welcome, [user]. Use git to push/pull your repositories

运行此:[user]@computer:~/work/git/repo$ GIT_CURL_VERBOSE=1 GIT_TRACE=1 git fetch会产生以下结果:

trace: built-in: git 'fetch'
trace: run_command: 'ssh' 'user@git.foo.com' 'git-upload-pack '\''/home/git/repo/'\'''
[waits seemingly indefinitely]

但如果我运行ssh user@git.foo.com,我就会进入服务器。

2 个答案:

答案 0 :(得分:1)

我最近买了一台新的路由器。在看到这个SO帖子后,我切换回旧路由器:git clone hangs forever on github

一切都有效。

“这就是为什么我们不能拥有好东西” - 我的新路由器。

我仍然感到困惑的是我的路由器是如何设法以这样的方式打破我的工作服务器中的SSH并从github克隆而不是从我们的工作服务器克隆的。

答案 1 :(得分:0)

如果我没记错的话,git statusgit diff离线工作,这样就没有意义了。您可以通过SSH手动连接这一事实很重要 - 这可以确保远程服务器正常并且没有DNS /等问题。

我没有看到git"只是挂着"很多时候,但有一个案例是在Windows上使用Git-UI(而不是通过控制台!),当GIT试图从后台作业中询问您的密码而没有正确设置core.askpass时。在Windows机器上很常见,当使用Git-Extensions并在具有HTTPS或SSH服务器的混合GUI / Bash环境中工作时。在控制台上它可以正常工作,但GUI可能会挂起任何连接尝试。

如果听起来与您的设置有些相似,请检查:

  • 您的SSH在连接期间是否要求输入任何登录名/密码?
  • 您的GIT客户是否先前要求他们?现在呢?
  • 您是否在GIT中使用任何凭证代理?它是在后台运行等吗?

我不知道它内部是如何工作的,但是我可以想象一下,当你配置Git使用ie在安装时选择,没有配置core.askpass,一直使用Git-GUI并且它工作正常现在你的选美因某种原因而死了,Git试图要求输入密码并挂起,因为core.askpass没有设置..

这是纯粹的猜测,但即使完全错过了 - 仍然值得检查以上几点并将其写下来,以便其他人可能会发现奇怪的事情。