从git 2.10+(Q3 2016:于2016年9月2日发布)开始,您可以为
GIT_SSH_COMMAND
设置一个
config(而不仅仅是一个环境变量,如
Rober Jack Will的
answer中所描述的)。
查看
提交3c8ede3(2016年6月26日)由
Nguyễn Thái Ngọc Duy(pclouds
)完成。
(由Junio C Hamano -- gitster
--在提交dc21164中合并,2016年7月19日)
A new configuration variable core.sshCommand
has been added to
specify what value for GIT_SSH_COMMAND
to use per repository.
core.sshCommand:
If this variable is set, git fetch
and git push
will use the specified command instead of ssh
when they need to connect to a remote system.
The command is in the same form as the GIT_SSH_COMMAND
environment variable and is overridden when the environment variable is set.
这意味着
git pull
可以是:
cd /path/to/my/repo/already/cloned
git config core.sshCommand 'ssh -i private_key_file'
# later on
git pull
当克隆一个新的仓库时,如果还没有任何`.git/config`文件需要修改,可以先为一个命令设置它,比如`git clone`或者`git submodule add`。
git -c core.sshCommand="ssh -i private_key_file" clone host:repo.git
一旦存储库存在,您可以在
.git/config
中永久设置该选项。
cd <repo or submodule you just cloned>
git config core.sshCommand "ssh -i private_key_file"
这比设置一个
GIT_SSH_COMMAND
环境变量要容易,根据
noted的
Mátyás Kuti-Kreszács所述,在Windows上。
set "GIT_SSH_COMMAND=ssh -i private_key_file"
对于所有这些命令,你可以添加一个
-o IdentitiesOnly=yes
来限制 SSH 只使用你指定的私钥/公钥:
git config core.sshCommand 'ssh -i private_key_file -o IdentitiesOnly=yes'
git -c core.sshCommand="ssh -i private_key_file -o IdentitiesOnly=yes" clone host:repo.git
set "GIT_SSH_COMMAND=ssh -i private_key_file -o IdentitiesOnly=yes"
gsullins建议在
.zshrc
中添加以下别名
(在评论中提到)。
alias git.key1="git config core.sshCommand 'ssh -i <absolute path to private key>'"
正如
Jaredo Mills在
一条评论中指出的:
一个陷阱:如果您将您的仓库镜像到多个主机(Github、Gitlab),并使用不同的私钥,那么这种方法将发送错误的密钥。
密钥与仓库无关,而与用户名和主机名相关。 ~/.ssh/config
是正确的地方,可以正确地关联它,并且它具有适合此工作的正确匹配能力(请参阅man ssh_config
)。
请参阅
HeyWatchThis的
答案以进行说明。
git config core.sshCommand 'ssh -i private_key_file'
。请参考我在下面的答案。 - VonCcore.sshCommand
解决方案是唯一一个在重启后仍然有效的解决方案。 - Andrew Koster