有一种更好的方法来实现你的目标。虽然问题和各种答案很有趣且富有教育意义,但是实现目标的最佳方法不涉及GIT_SSH_COMMAND变量。
与其将信息放在“git”中,不如将信息放在“ssh”中。
在Unix/Linux中,“ssh”命令一直有一个“config”文件。在近年来的Windows中,也有这种能力。配置“ssh”以了解您的身份文件,然后当您执行“git clone”命令时...
git clone <repository>
需要以ssh协议的方式指定<repository>
。以下是ssh协议样式,在"git clone"的"git"参考页面上,子标题为"GIT URLs"中有详细描述:
[user@]host.xz:path/to/repo.git/
请注意,没有“方案”说明符;也就是说,没有“ssh:”、“git:”、“https:”或“ftps:”的指示。相反,冒号“:”将“主机”与“路径”分开。这种使用冒号“:”的方式不符合URL格式,而非一致性使该协议风格与其他协议区别开来。
在“ssh”内部进行配置的一个潜在重要好处是,“ssh”允许别名。假设,对于连接到特定机器的“ssh”会话,我通常想以自己的身份登录,但有时我想以另一个名为“user_for_git”的人的身份登录。进一步假设用户的标识文件不同。以下“ssh”配置具有按我的真实域命名的条目,但具有“user_for_git”的别名。请注意,关键字“Host”引入了一个部分,而变量“HostName”是部分中的几个参数之一。
Host go_git.example.com
HostName = example.com
User = user_for_git
IdentityFile = ~/.ssh/id_rsa_for_git_at_example_com
Host example.com
HostName = example.com
User = user_me
IdentityFile = ~/.ssh/id_rsa_for_normal
在此基础上,"git clone" 命令可以如下所示:
git clone go_git.example.host:/path/to/repo.git
请注意,在此情况下,语法中可选的
user@
部分未被使用。远程仓库由
host:path
指定,但在这种情况下,
host
是“ssh”配置文件中定义的别名。
在Linux/Unix中,“ssh”配置文件的名称为
config
,位于隐藏目录
.ssh
下,该目录位于主目录
$HOME
下;这表示为
~/.ssh/config
。对于Windows中等效的位置,请查看这里的答案:
https://dev59.com/jF8d5IYBdhLWcg3w8F--#62842368。