相信很多开发者都会遇到在自己的电脑上使用不止一个git帐号的情况。一个一般是自己的github帐号,另一个则是公司的git帐号,比如gitlab、bitbucket等。如果采用https方式通信,那么git帐号间不会有冲突,但你在每次pull、push的时候都要输入帐号密码,十分繁琐。而且当代码库达到十分庞大的规模时,如果仍然采用https方式,在git pull时可能出现超时不响应的情况,此时只能采用ssh方式。ssh在配置完ssh key后使用起来很方便,但是git帐号间可能出现冲突,这时候该如何解决呢?
配置ssh key的方式此处不再赘述,假设.ssh文件夹下有id_rsa、id_rsa.pub、didi_id_rsa、didi_id_rsa.pub,分别对应个人github帐号私钥公钥以及公司git帐号私钥公钥。如果不进行设置,使用github账号时没有问题,但是使用公司账号时,由于默认情况下私钥存放在id_rsa文件中,因此git仍会尝试用id_rsa中而不是didi_id_rsa中的私钥去与服务器上添加的公钥进行比对,自然而然会报错。通常这种情况下git会让你输入密码,笔者连续三次输入密码错误(其实根本不知道该密码为何物),报错,Permission denied。
网络上的解决方案普遍为在ssh的配置文件中加入以下字段:
Host github.com
hostname github.com
User Boy-A
IdentityFile /User//.ssh/id_rsa
Host git.xiaojukeji.com
hostname git.xiaojukeji.com
User Boy-B
IdentityFile /User//.ssh/didi_id_rsa
该文件的主要作用就是指明各个git帐号对应的User以及IdentityFile的文件位置。当配置完毕后,在各个项目repo中应用自己的用户名以及邮箱:
1.取消global
git config --global --unset user.name
git config --global --unset user.email
2.设置每个项目repo的自己的user.email
git config user.email "xxxx@xx.com"
git config user.name "ddfe"
如此,各个git帐号间就可以“井水不犯河水”了。
但是,最麻烦的地方其实并不在这里,而是这个配置文件究竟位于何处。根据网友的分享,Window系统中,该配置信息存放在名为config的文件中,位置在~/.ssh/目录下,而在Linux/Unix系统中配置信息则保存在ssh_config文件中,至于位置,众说纷纭。笔者使用的是macOS系统,尝试用“ssh -vT git@git.xiaojukeji.com”去查看ssh连接主机的debug信息,终于发现了头绪,debug信息的第二行如下:
debug1: Reading configuration data /etc/ssh/ssh_config
终于找到了文件的位置!修改之,大功告成!
总结:
-
使用命令“ssh -vT git@xxx.com”查看ssh_config文件的位置
-
进入ssh_config文件,配置各个git帐号的User以及IdentityFIle
-
在各个项目中配置好user.name以及user.email
-
在各个git帐号间尽情穿梭吧~