因此,我假设这是SSH问题,但是我不擅长直接使用它。我可以运行任何设置“测试”连接的命令,并让我确切地知道发生问题的时间和地点吗? ,
fetch
或clone
(包含大量数据)(即使与push
一起运行时)也只是在远程连接的中间“挂起”,没有任何迹象表明它们为何停止,所以它们没有用。有什么办法可以获取有关SSH连接中发生的情况的更多详细信息吗?
#1 楼
环境变量从Git 2.3.0版开始,您可以使用环境变量
GIT_SSH_COMMAND
并传递-v
详细参数,如下所示:GIT_SSH_COMMAND="ssh -v" git clone example
更详细地说,将其命名为
-vvv
:GIT_SSH_COMMAND="ssh -vvv" git clone example
Git config
从Git 2.10.0版开始,它将在Ubuntu 17.04的版本中仓库,您可以全局保存此配置,也可以按以下示例保存每个仓库:
git config core.sshCommand "ssh -vvv"
git pull
#2 楼
我有一个类似的问题。为了调试,我在ssh_config中添加了一行。这是我的操作方法:git remote -v
您会发现这样的一行:
origin git@github.com:me/test.git (fetch)
origin git@github.com:me/test.git (push)
在这种情况下,主机是
github.com
。现在,您可以在ssh配置中添加主机条目:vim ~/.ssh/config
并添加:
Host github.com
LogLevel DEBUG3
使用git操作时,现在应该会收到大量调试消息。要获取较少的调试消息,请尝试使用
DEBUG1
对于GIT版本> = 2.3.0,请参阅@Flimm的答案以获取更智能的解决方案。
#3 楼
仔细阅读man git
,可以设置一些有用的环境变量GIT_TRACE_PACKET
和GIT_TRACE
。例如:GIT_TRACE_PACKET=true git clone ssh://[...]
游戏有点晚了,但是希望这对某人有帮助!
评论
这很有用,但是您不会收到有关SSH连接问题的任何消息。但是,如果SSH连接有效,则这是进一步调试的方法。
–Trendfischer
2015年4月14日在9:21
#4 楼
按照man ssh
: -v Verbose mode. Causes ssh to print debugging messages about its progress. This
is helpful in debugging connection, authentication, and configuration problems.
Multiple -v options increase the verbosity. The maximum is 3.
所以,请尝试
ssh -v
。如果那不能告诉您您需要了解什么,则可以添加一个或两个v
以获得更详细的调试信息。特别是对于Github,请尝试ssh -vvvT git@github.com
。通常,根据我的经验,当客户端无法完成所选的身份验证方法时,会在安装过程中挂起SSH会话。检查您的私钥是否在正确的位置并具有正确的权限,并与您给Github的公钥匹配。
评论
感谢您的回答,但是我可能应该以不同的方式提出这个问题(因为GitHub不允许这样的直接SSH连接)。我编辑了帖子和标题,但是最好丢掉该帖子并创建一个新问题吗?
–IQAndreas
2013年9月12日21:52
@IQAndreas,从身份验证阶段将要执行的意义上讲,GitHub确实允许类似的SSH连接,如果问题确实在SSH步骤中发生,您将以这种方式看到它。如果您发现无法做到那么远,则说明正在发生某种事情,甚至无法建立连接。
–tgies
2013年9月13日上午10:01
我正在通过身份验证,有时可以毫无问题地在存储库上进行推/拉。但是通常它只是在命令中间“挂起”而不会继续(特别是当我传输大量数据(例如大型克隆或推送)时)。没有错误消息,它只是坐在那里并且不会继续。
–IQAndreas
2013年9月13日20:40
#5 楼
我没有办法告诉git(1)用于ssh(1)的外部命令,但是作为一种解决方法,只需将/ path / to / ssh重命名为/path/to/ssh.orig,创建一个shell脚本包装程序/ path / to / ssh,并添加-v标志:完成调试后,删除脚本并将/path/to/ssh.orig还原到/ path / to / ssh。评论
与其将文件移动到/ usr / bin中,不如考虑将包装器脚本放在/ usr / local / bin中。
–muru
14-10-23在17:28
至少在我奇怪的Windows安装中,可以将环境变量GIT_SSH设置为指向您要Git使用的二进制文件。
–编码器
15年1月22日在10:29
如前所述,您绝对不想修改原始的ssh文件,但是我对/ usr / local /中的解决方法有所保留。它不透明,很容易踩到。更好:将解决方法脚本放入$ HOME / bin中,并将该新bin目录添加到用户的$ PATH变量中,位于其他PATH段之前。在此之前,我将检查是否没有更好的ENV var解决方案(此答案很旧)。
–斯科特·普里夫(Scott Prive)
18年11月7日在17:47
评论
至少对我来说,如果这样做:GIT_SSH_COMMAND =“ ssh -v” git clone示例我可以调试SSH版本,它将克隆到消息中后打印,但在git clone上失败。在删除GIT_SSH_COMMAND之后,它就可以工作了。最终,达到了目的。
– Paulo Oliveira
16年1月18日在15:06
一次比较好:git -c core.sshCommand =“ ssh -vvv” pull
–约瑟夫·施特劳斯(Joseph K. Strauss)
17年5月2日在15:24
git config --global core.sshCommand“ ssh -vvv” git克隆示例
–偶氮
18年6月5日上午10:01
那旧版本呢? 1.8?
– khaverim
19年11月20日在18:52
我很高兴在开源生态系统中为所有问题提供解决方案。谢谢
–RajaRaviVarma
20年5月20日在6:25