git配置双github账号
此文章转载于知乎
前言
不知是否有人像我一样,搞了两个GitHub账号,一个用来正常的和别人合作项目,另一个用来自己写一些代码,希望能做到两个本地账户和远程账号都完全隔离,没有联系,也不会被混淆使用。
但是这样就会有一个问题,设置本地用户user.email时候,如果你两个 GitHbu 账号仓库使用同一个本地用户,GitHub会将本地的用户自动与相应的 GitHub 账号关联起来,这样在 commit 记录里面就能看到是谁提交的了,这是我不想看到的结果。
当初的我以为只要把同一个 SSH 公钥分别添加到两个 GitHub 账户,再在不同的仓库设置不同的user.name 和 user email 就OK了.后来发现我太天真了,并不行,每个公钥只能用一次。然后我就考虑生成两个密钥,分别添加到不同的账户,但是电脑在连接远程仓库时,只能默认选择其中固定的一个来连接,并不会根据我不同仓库的设置选择不同的密钥,结果就是还是只能免密连接一个 GitHub 账户的仓库。
你所使用的 SSH 密钥决定了你是否有权限访问某一个 GitHub 账号下面的仓库,而你本地仓库设置的 use email 决定了在 GitHub 的 commit 记录中的用户,而一般在没有进行以下配置的情况下,你的电脑只会默认使用一个 SHH 密钥进行连接,这就导致了你只能访问一个 GitHub 账号。
然后就到处找教程,但是不知道是否是因为时间太久远了,都是错误的,而且错误都是一样的,最后终于七拼八凑整成功了。
下面将详细介绍方法。
生成密钥
首先是先生成两个SSH密钥,对应你的两个身份(假设为 public 和 private)。
假设你当初已经用ssh-keygen -t rsa -C “youremail@gmail.com”生成了一对秘钥id_rsa和id_rsa.pub , 保存在了~/.ssh文件夹内。
然后,你需要再用另一个邮箱生成一对 private 的秘钥ssh-keygen -t rsa -C “private_email@gmail.com”。这时候要注意重命名,否则会覆盖上面的密钥文件。假设我们生成了一对新的秘钥private 和private.pub。
然后分别将这两对密钥加入到对应的 GitHub 账户中,这个步骤就略过了。
配置置件
编辑~/.ssh/config文件。如果该文件不存在的话,直接创建一个就好。里面的内容如下:
1 |
|
网上大部分教程的配置文件中Hostname都是github.com,配置成那样是不能正常SSH访问的。我也不知道大家为什么都那样写,难道之前的就是这样?
测试
修改完之后,在git bash运行以下命令(@后面的主机名为上面配置文件中填写的Host选项),检查是否正常。
(先注意一下:这里一定是先把两个公钥添加到对应的 GitHub 账户,再进行下面的 ssh 连接测试,否则肯定是连接不上,会显示 permission denied。)
1 |
|
如果都能正常返回如下信息,就说明配置正常。
1 |
|
同样的方式你就可以配置更多的以SSH登录的不同git用户。
删除全局设置
1 |
|
配置仓库设置
首先要删除GIT配置的全局用户名和邮件地址,接着在每个项目仓库中按照需求设置不同的user.name和 user.email:
添加本地设置
设置为私有仓库的GitHub账号邮箱和公有账号的GitHub邮箱
1 |
|
之后在添加远程仓库的时候,把github.com 修改成github_public 或者github_private就好了(即上述文件中的HOST选项),用上面两个 Host 名称来代替原来的github.com ,(这一步很重要)如:
1 |
|
其实,上面的配置文件的意思就是,按照你设置远程仓库时使用不同的 Host 名称,查找~/.ssh/config文件,使用不同的 SSH 文件连接到 GitHub。这样你就将是以不同的身份访问 GitHub 仓库。