跳至正文
Ende Sun
返回博客

开发者工作流

在 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 只是备用方案,不是默认方式。

事情虽小,但写下来之后,我每次切换网络都不必再重新摸索一遍。