这听起来与我目前的工作设置非常相似。看来您已经设置了单独的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)网址与您各自存储库中的正确Host网址匹配。如果您已经拥有个人存储库,则可以在文本编辑器中编辑该存储库的 .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
当然,您始终可以在您的 ~/.ssh/config 文件中设置您的 Host 网址之一
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
这现在应该以该 repo 的正确用户身份发送提交。