相信很多开发者都会遇到在自己的电脑上使用不止一个 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 gitlab.zjut.com
 User Boy-A
 IdentityFile /User/<yourusername>/.ssh/id_rsa
 
Host git.xiaojukeji.com
 hostname git.xiaojukeji.com
 User Boy-B
 IdentityFile /User/<yourusername>/.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 帐号间就可以“井水不犯河水”了。

但是,最麻烦的地方其实并不在这里,而是这个配置文件究竟位于何处。根据网友的分享,Windows 系统中,该配置信息存放在名为 config 的文件中,位置在 ~/.ssh/ 目录下,而在Linux/Unix系统中配置信息则保存在 ssh_config 文件中,至于位置,众说纷纭。笔者使用的是 macOS 系统,尝试用 “ssh -vT git@git.xiaojukeji.com” 去查看 ssh 连接主机的 debug 信息,终于发现了头绪,debug信息的第二行如下:

debug1: Reading configuration data /etc/ssh/ssh_config

终于找到了文件的位置!修改之,大功告成!

总结:

  1. 使用命令 “ssh -vT git@xxx.com” 查看 ssh_config 文件的位置
  2. 进入 ssh_config 文件,配置各个 git 帐号的 User 以及 IdentityFIle
  3. 在各个项目中配置好 user.name 以及 user.email
  4. 在各个 git 帐号间尽情穿梭吧~

更新:

2018-05-23

笔者发现 git 的 ssh 配置文件的位置不一定是 ~/.ssh/ssh_config,具体位置还是需要通过上面总结中的第一点进行查看。如果是 ssh 登录云主机的操作,配置文件的位置则可能是以下情况:

用户配置文件 (~/.ssh/config)
系统配置文件 (/etc/ssh/ssh_config)

Git
支付宝扫码打赏 微信打赏

坚持原创技术分享,您的支持将鼓励我继续创作!

扫描二维码,分享此文章

逆葵's Picture
逆葵

花名逆葵,刚刚毕业的北邮 CS 土著一枚。现在淘宝 FED 搬砖。《Vue.js 权威指南》作者之一。学习、思考、沉淀中,向成为顶级 JavaScript 技术栈开发者努力。