这听起来与我当前的工作设置非常相似。看起来您已经设置了独立的ssh-keys
,因此您还需要创建一个~/.ssh/config
文件,并填充类似于以下信息:
Host work.github.com
HostName github.com
User WORK_GITHUB_USERNAME
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_rsa
IdentitiesOnly yes
Host personal.github.com
HostName github.com
User PERSONAL_GITHUB_USERNAME
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_personal_rsa
IdentitiesOnly yes
每个属性都听起来很简单易懂,但IdentitiesOnly
则不太好理解。 我不会尝试解释它的作用,但它在我的当前设置中运行良好。
值得注意的是,Host URL
只是一个指针,用于获取正确的用户设置,对于将文件正确传输到目标HostName
url没有任何影响。
现在,您只需要确保您的origin
(或者一般的remote
)url与您各自存储库中的正确Host
url相匹配,具体取决于您的用户名。 如果您已经有现有的个人存储库,可以在文本编辑器中编辑该存储库的.git/config
文件:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git
或者通过命令行完成:
git remote set-url origin git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git
同样适用于您的工作:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@work.github.com:your_work_organization/project.git
或者,同样可以通过命令行实现:
git remote set-url origin git@work.github.com:your_work_organization/project.git
当然,您始终可以将您的Host
URL之一设置为您的~/.ssh/config
文件中的以下方式:
Host github.com
我只是使用 work.github.com
来更容易地查看配置关系。
设置完成后,您应该能够推送到各自的远程仓库。
编辑
需要注意的一件事是,如果您曾经为user.email
值设置全局 git 配置值(我猜 user.name
也会产生不同的值),git 将显示您的提交为该电子邮件用户。为了解决这个问题,您可以在本地仓库中覆盖全局 git 配置设置:
$ git config user.name "John Doe"
$ git config user.email johndoe@example.com
现在,这应该会将提交作为该仓库的正确用户发送。