环境变量

环境变量

在使用 GIT 时,我有通过 SSH 使用 GIT 的问题,而且由于它在工作时和在家使用不同的调制解调器时都运行良好,所以显然是我的家用调制解调器出了问题。我通过 HTTP 连接时没有遇到任何问题。

因此,我假设这是 SSH 问题,但我并不擅长直接使用它。是否有任何命令可以运行以建立“测试”连接,并让我确切知道问题发生的时间和地点?

几乎所有“较大”的命令(例如fetchclonepush包含大量数据的命令)git(即使使用运行-v)都只是在远程连接中间“挂起”,而没有任何迹象表明它们为何停止,因此它们毫无用处。

有什么方法可以获得有关 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 配置

从 Git 版本 2.10.0(位于 Ubuntu 17.04 的存储库中)开始,您可以全局保存此配置,或者按存储库保存,如下例所示:

git config core.sshCommand "ssh -vvv"
git pull

答案2

我遇到了类似的问题。为了进行调试,我在 ssh_config 中添加了一行。以下是我所做的:

git remote -v

在那里你会发现这样的一行:

origin  [email protected]:me/test.git (fetch)
origin  [email protected]:me/test.git (push)

在这种情况下,主机是github.com。现在您可以在 ssh 配置中添加 Host-Entry:

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://[...]

游戏有点晚了,但希望这对某些人有帮助!

答案4

我没有看到告诉 git(1) 用于 ssh(1) 的外部命令的方法,但作为一种解决方法,只需将 /path/to/ssh 重命名为 /path/to/ssh.orig,创建一个 shell 脚本包装器 /path/to/ssh,并添加 -v 标志:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

在通过 ssh 传输执行 git 命令时,我得到了详细输出。调试完成后,删除脚本并将 /path/to/ssh.orig 恢复为 /path/to/ssh。

相关内容