我想介入这个话题,因为最近我一直在尝试解决这个问题,而不必每次克隆新版本时都执行git config core.sshCommand
。
因此,我在Jakuje 的实现基础上进行了一些扩展。
我有两个 Gitlab 帐户。一个是用我的工作电子邮件注册的,另一个是个人电子邮件注册的。
为此,我有两个不同的私钥:
- 个人:
~/.ssh/keys/personal.id_rsa
- 工作:
~/.ssh/keys/work.id_rsa
现在,我有一个全局 Git 配置位于~/.gitconfig
,还有一个备用配置位于~/work.gitconfig
。工作 Git 配置仅包含与全局配置不同的设置。
所以在这种情况下,
~/work.gitconfig
[core]
sshCommand = ssh -i ~/.ssh/keys/work.id_rsa
我将所有与工作相关的代码仓库克隆到~/source/work
目录下。
接下来的魔法发生在我的~/.gitconfig
文件中。我加入了以下部分(git includeIf
):
[includeIf "gitdir:~/source/work/**"]
path="~/work.gitconfig"
现在,这将告诉
git
在
~/source/work
中的所有repo中包括我的工作git配置。然后,此配置将自动设置用于推送/拉取的ssh密钥为我用于工作repo使用的密钥。
您需要确保克隆到正确的文件夹中。
您可以将此与使用通用ssh配置结合使用。
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/keys/personal.id_rsa
默认情况下,Git会使用personal.id_rsa
(个人账户)进行操作,但当代码仓库位于work
目录下时,则会使用工作账户(基于SSH密钥)。