开发者工作流
在 VPN 环境下于同一台电脑使用两个 GitHub 账号
阅读需 3 分钟
在 VPN 环境下于同一台电脑使用两个 GitHub 账号
我在同一台笔记本上使用两个 GitHub 账号:一个是个人账号,用于自己的项目;另一个是工作账号,用于公司的仓库。大多数时候,配好 SSH 密钥就能正常使用。但当我在中国工作、通过 VPN 上网时,常用的克隆命令开始失败,而解决方法足够简单,值得记录下来备查。
现象
在本地配置了两个账号的情况下,用 GitHub 的标准地址克隆,在这种网络环境下无法成功:
# 在 VPN 下、配置了两个账号时,这条命令对我无效
git clone git@github.com:personal-user/repo.git
解决方法:使用 SSH 主机别名,而不是 github.com
当你有多个账号时,每个账号通常有自己的 SSH 密钥,并在 ~/.ssh/config 中为每个账号定义一个主机别名,指向 GitHub 并使用对应的密钥。大致如下(名称仅为示例):
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Host work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
关键在于:在远程地址中使用这个别名,而不是 github.com。这样 SSH 会套用该别名的配置,包括应当使用哪把密钥:
# 个人账号
git clone git@personal:personal-user/repo.git
# 工作账号
git clone git@work:work-org/repo.git
在我的情况下,坚持使用别名,就让两个账号都恢复了正常克隆。它还有一个好处:每个仓库使用哪个身份,一目了然。
备用方案:Git 找不到主机时
有时 Git 根本无法解析主机。遇到这种情况,我会把该仓库的远程地址改为 HTTPS,并在 URL 中写明用户名:
git remote set-url origin https://personal-user@github.com/personal-user/repo.git
之后 Git 会通过 HTTPS 为这个用户请求凭据。它不如 SSH 优雅,但在 SSH 线路不配合时,至少能把代码推送上去。
我的几条习惯
- 有多个账号时,绝不直接用
git@github.com:克隆,而是始终使用该仓库所属账号的别名。 - 如果某个仓库已经用错误的地址克隆了,用
git remote set-url修正即可,不必重新克隆。 - 带用户名的 HTTPS 只是备用方案,不是默认方式。
事情虽小,但写下来之后,我每次切换网络都不必再重新摸索一遍。