当有多个git账号的时候,比如一个github,一个gitlab。这两者你的邮箱如果不同的话,就会涉及到一个问题,生成第二个git的key的时候会覆盖第一个的key,导致必然有一个用不了。
我们可以在~/.ssh目录下新建一个config文件配置一下,就可以解决问题
具体步骤
生成第一个ssh key (这里我用于gitlib,用的公司邮箱)
ssh-keygen -t rsa -C "yourmail@公司.com"
这里不要一路回车,让你确认文件名称的时候 写个名称,比如 id_rsa_gitlib ,之后的两个可以回车。
完成之后我们可以看到~/.ssh目录下多了两个文件
生成第二个ssh key (这里我用于github,用的是自己邮箱)
ssh-keygen -t rsa -C "yourmail@163.com"
还是一样不要一路回车,在第一个对话的时候继续写个名字,比如 id_rsa_github ,之后的两个可以回车。
完成之后我们可以看到又多出两个现两个文件。(一个公钥一个私钥)
打开ssh-agent
这里如果你用的github官方的bash,ssh-agent -s,如果是其他的,比如msysgit,eval $(ssh-agent -s)
添加私钥
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlab
创建并修改config文件
在windows下新建一个txt文本,然后将名字和后缀一起改成config
在bash下的话直接运行
touch config
添加一下内容
gitlab
Host git.iboxpay.com
HostName // 这里填你们公司的git网址即可
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_gitlab
User zanyang
github
Host github.comHostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
User L
在github和gitlab上添加公钥即可,这里不再多说。
测试:
$ ssh -T git@github.com
PS:如果到这里你没有成功的话,别急,教你解决问题的终极办法--debug
比如测试github,ssh -vT git@github.com
-v 是输出编译信息,然后根据编译信息自己去解决问题吧。就我自己来说一般是config里的host那块写错了
补充一下
如果之前有设置全局用户名和邮箱的话,需要unset一下
git config --global--unsetuser.name
git config --global--unsetuser.email
然后在不同的仓库下设置局部的用户名和邮箱
比如在公司的repository下
git config user.name "yourname"
git config user.email "youremail"
在自己的github的仓库在执行刚刚的命令一遍即可。
这样就可以在不同的仓库,已不同的账号登录。