同一机器配置多个GitHub账号
在同一机器上对不同repo使用不同的github账号是个常见需求。举个例子,repo1托管在github账号x1下,而repo2托管在账号x2下,如何方便地在同一机器上使用不同账号自动git push到对应的远端?比较直接的做法是在不同repo目录下使用git config配置用户名,但这样有两个问题:
- 每个repo都要配置一遍比较繁琐
- 有些情况下无法配置。比如使用
hexo-deployer-git
部署Hexo网站时,
.deploy_git目录是动态生成的,而所用的git账户和远端url修改不便。
于是,我们可以借用SSH config文件来把不同github账号与repo联系起来。在SSH config中定义多个不同的host项即可,然后在访问github时,使用一个虚拟host作为别名代替真正的主机名github.com即可。
生成SSH Key
直接按步骤来即可: # Generating a new SSH key and adding it to the ssh-agent
| |
Add your SSH private key to the ssh-agent:
添加公钥到GitHub账户
按Tutorial步骤来,点点鼠标复制粘贴即可: # Adding a new SSH key to your GitHub account
拷贝公钥:
然后把公钥通过GitHub配置页添加至账户: Profile Photo -> Settings -> SSH and GPG keys -> New SSH keys
编辑SSH Config
这是最重要的的部分,编辑 ~/.ssh/config (不存在则创建一个):
各字段的解释:
- Host: 主机别名,也是每段定义项的名字,将来用这个别名来指代所用的用户名及私钥
- HostName: 要登录的远端主机名 (对github来说就是
github.com) - User: SSH连接所用的用户名 (对github来说就是
git) - IdentityFile: 上面生成的私钥
假设上面示例文件中的私钥和账户对应关系如下:
id_rsa->main@example.comid_rsa_x1->x1@example.comid_rsa_x2->x2@example.com
一个repo的远端url大概长这样:
| |
对于无SSH config或上面的示例配置,使用上面url (github.com) 进行访问时,使用的是账户main@example.com。如果我们想用x1@example.com来访问此repo,需要将它的主机名改一下,与SSH config中的配置相对应:
| |
测试连接
验证上面配置是否生效也很简单,使用下面命令测试即可:
| |
如果登录成功,Hi之后会显示对应登录账户的GitHub用户名。