7f8308cfae8d3357f1ec42efac346614.png

0. 前言

不知是否有人像我一样,搞了两个GitHub账号,一个用来正常的和别人合作项目,另一个用来自己写一些代码,希望能做到两个本地账户和远程账号都完全隔离,没有联系,也不会被混淆使用。

但是这样就会有一个问题,设置本地用户user.email时候,如果你两个 GitHbu 账号仓库使用同一个本地用户,GitHub会将本地的用户自动与相应的 GitHub 账号关联起来,这样在 commit 记录里面就能看到是谁提交的了,这是我不想看到的结果。

当初的我以为只要把同一个 SSH 公钥分别添加到两个 GitHub 账户,再在不同的仓库设置不同的user.nameuser email 就OK了.后来发现我太天真了,并不行,每个公钥只能用一次。然后我就考虑生成两个密钥,分别添加到不同的账户,但是电脑在连接远程仓库时,只能默认选择其中固定的一个来连接,并不会根据我不同仓库的设置选择不同的密钥,结果就是还是只能免密连接一个 GitHub 账户的仓库。

你所使用的 SSH 密钥决定了你是否有权限访问某一个 GitHub 账号下面的仓库,而你本地仓库设置的 use email 决定了在 GitHub 的 commit 记录中的用户,而一般在没有进行以下配置的情况下,你的电脑只会默认使用一个 SHH 密钥进行连接,这就导致了你只能访问一个 GitHub 账号。

然后就到处找教程,但是不知道是否是因为时间太久远了,都是错误的,而且错误都是一样的,最后终于七拼八凑整成功了。

下面将详细介绍方法。

1. 生成密钥

首先是先生成两个SSH密钥,对应你的两个身份(假设为 public 和 private)。

假设你当初已经用ssh-keygen -t rsa -C “youremail@gmail.com”生成了一对秘钥id_rsaid_rsa.pub , 保存在了~/.ssh文件夹内。

然后,你需要再用另一个邮箱生成一对 private 的秘钥ssh-keygen -t rsa -C “private_email@gmail.com”。这时候要注意重命名,否则会覆盖上面的密钥文件。假设我们生成了一对新的秘钥privateprivate.pub

然后分别将这两对密钥加入到对应的 GitHub 账户中,这个步骤就略过了。

2. 编辑配置文件

编辑~/.ssh/config文件。如果该文件不存在的话,直接创建一个就好。里面的内容如下:

# 公共
Host github_public
Hostname ssh.github.com
IdentityFile ~/.ssh/id_rsa
port 22

#个人
Host github_private
Hostname ssh.github.com
IdentityFile ~/.ssh/private
port 22
网上大部分教程的配置文件中Hostname都是github.com,配置成那样是不能正常SSH访问的。我也不知道大家为什么都那样写,难道之前的就是这样?

修改完之后,在git bash运行下列命令(@后面的主机名为上面配置文件中填写的Host选项),检查是否正常:

ssh -T git@github_public
ssh -T git@github_private

如果都能正常返回如下信息,就说明配置正常。

Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

同样的方式你就可以配置更多的以SSH登录的不同git用户。

3. 配置仓库设置

首先要删除GIT配置的全局用户名和邮件地址,接着在每个项目仓库中按照需求设置不同的user.nameuser.email

# 删除全局设置
git config --global --unset user.name
git config --global --unset user.email

# 添加本地设置
git config --local user.name xxxx
git config --local user.email xxx

之后在添加远程仓库的时候,把github.com 修改成github_public 或者github_private就好了(即上述文件中的HOST选项),用上面两个 Host 名称来代替原来的github.com ,(这一步很重要)如:

git remote add origin git@github_public:xxx/example.git # public user
git remote add origin git@github_private:xxx/example.git # priavate user

其实,上面的配置文件的意思就是,按照你设置远程仓库时使用不同的 Host 名称,查找~/.ssh/config文件使用不同的 SSH 文件连接到 GitHub。这样你就将是以不同的身份访问 GitHub 仓库。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐