GitHub 多账户并存

前提

  • 假设你已经正常使用 user1@gmail.com 作为 GitHub 的账户,希望添加 user2@gmail.com 作为 GitHub 的另一个账户。
  • 假定 user1@gmail.com 是更经常使用的账户,user2@gmail.com 只是为了测试或较少使用。

创建新的 ssh 密钥

可以使用 ssh-keygen 来创建新的 ssh 密钥:

ssh-keygen -C "user2@gmail.com"

创建过程中,假定使用 /Users/YOURNAME/.ssh/id_rsa2 作为存储路径,并且 ssh 密钥的密码为空。

创建后,将 id_rsa2.pub 也即公钥添加到 user2@gmail.com 对应的 GitHub 账户中。

配置 ssh 的 config

编辑 ~/.ssh/config,添加类似下面的内容:

1
2
3
4
5
6
7
8
9
10
11
# user1
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# user2
Host github.cn
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa2

编辑后,测试连接是否成功。如果成功,会有类似下面的提示:

1
2
3
4
5
$ ssh -T git@github.com
Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@github.cn
Hi user2! You've successfully authenticated, but GitHub does not provide shell access.

核心原理就是,当 ssh 尝试访问某域名时,会尝试和 config 中 Host 对应的记录匹配。如果匹配成功,就会使用该记录中 HostName 的值作为真正的域名、以及使用 IdentityFile 对应的私钥进行配对。这样,既可以实现把 github.cn 当作 github.com 访问、又可以匹配到正常的私钥。

这里,github.cn 只是个代号,你可以使用任何其它你喜欢的域名。

对 git 项目使用适当的 ssh 连接

前面提到,假定 user1@gmail.com 是更经常使用的账户,这样我们可以设置该账户为全局默认的 git 账户。通常,你已经这么设置了。不过,如果可以通过下面的命令再次设置以确认。

1
2
git config --global user.name 'user1'
git config --global user.email 'user1@gmail.com'

而对于不经常使用的、需要使用 user2@gmail.com 账户的 git 仓库,则需要手动设置当前仓库的账户信息。

1
2
git config --local user.name 'user2'
git config --local user.email 'user2@gmail.com'

并且,需要修改仓库地址。比如,如果原来的仓库地址是:
git@github.com:user2/test.git

则需要修改为:
git@github.cn:user2/test.git

设置结束后,可以分别到使用不同账户的仓库进行测试。

至此,结束。