如何解决一台电脑多个git账号关联


1.场景介绍


现在我手中一台电脑,公司用的gitlab仓库,使用的是公司邮箱注册,所以需要我本地git推送时显示是公司的邮箱xx@a.com,另外我自己的github是用的另一个邮箱注册的xx@b.com,所以我想要推送公司的gitlab时,使用的是a邮箱,推送github时,使用的是b邮箱。

2.步骤


  • 1.由于我使用公司的仓库较多,所以我把git全局的name和email设置为公司的邮箱和名字(对,git在全局和具体某个仓库的name和email可以是不一样的),然后我要使用github的时候,每git clone下来一个仓库,必须cd到该仓库下,然后使用:

    git config user.name "qiujiang"
    git config user.email "xx@b.com"
    

    将我github的邮箱配置到这个仓库(也就是每次clone,想要推送的话,就要配置一次)

  • 2.所以全局的配置就该是:

    git config --global user.name "qiujiang" 
    git config --global user.email "xx@a.com" 
    

    这样在我没有单独设置的仓库就会以这个邮箱和名字推送

  • 3.创建ssh key:

对两个邮箱分别创建一个ssh key: 先:

cd ~/.ssh // 进入目录,该目录下保存生成的秘钥

然后,根据账户邮箱生成秘钥。例如我在GitHub上的邮箱是xx@b.com,则命令为:

ssh-keygen -t rsa -C "xx@b.com"

输入完成后,会有如下提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/liugui/.ssh/id_rsa):

在分号后输入保存的文件名,例如id_rsa_@b.com_github * 4.添加私钥到本地,添加公钥到gitlab/github

SSH协议的原理,就是在托管网站上使用公钥,在本地使用私钥,这样本地仓库就可以和远程仓库进行通信。在上一步已经生成了秘钥文件,接下来需要使用秘钥文件,首先是在本地使用秘钥文件:

ssh-add ~/.ssh/id_rsa_@b.com_github // 将GitHub私钥添加到本地
ssh-add ~/.ssh/id_rsa_@a.com_gitlab // 将GitLab私钥添加到本地

公钥的添加,如GitHub对应的公钥在id_rsa_@b.con_github.pub中,用vim打开,全部复制,粘贴到GitHub-settings-ssh-key新建ssh-key。

  • 5.对本地秘钥进行配置

由于添加了多个密钥文件,所以需要对这多个密钥进行管理。在.ssh目录下新建一个config文件,将一下内容复制进去:

Host github
HostName github.com 
User qiu
IdentityFile ~/.ssh/id_rsa_@b.com_github 

Host gitlab
HostName gitlab.com
User qiu
IdentityFile ~/.ssh/id_rsa_@a.com_gitlab
  • 6.测试 至此,托管网站的公钥添加完成。总结来说,就是针对每个托管网站分别生成一对密钥,然后分别添加到本地和托管网站。

这时候,可以测试一下配置是否成功,测试命令使用别名。例如,对于GitHub,本来应该使用的测试命令是:

ssh -T git@github
  • 7.参考链接

https://segmentfault.com/a/1190000016269686 https://blog.csdn.net/jifaliwo123/article/details/79126785


3.补充


配置好多个秘钥及对应的邮箱后,很多人在push代码的时候会出现权限不足,有可能有两个原因: * 1 clone仓库的时候使用的不是ssh而是HTTPS的方式,而git验证公私钥对的时候只是通过ssh方式的,所以选择克隆链接的时候务必切换到ssh方式:

  • 2 如果你恰好选择了HTTPS方式clone,也是有办法解决的,在本地仓库的根目录下有一个.git的隐藏文件,可以修改下面的config文件达到目的: 打开该文件

    vi .git/config
    

    可以看到其中的url,修改前长这样子。

    url = https://github.com/user_name/repo_name.git
    

    我们把它修改为:

    url = https://user_name:password@github.com/user_name/repo_name.git
    

    :@ 将你的github账号密码写入url,这样带来一些不安全隐患,不过我们普通用户也不必过多在意。