前言
一般来说,为了使用的方便,在 Git 方式的版本控制仓库上都会配置 ssh 连接方式,这样每次在提交代码的时候不用重复输入自己的邮箱、密码,免去很多麻烦。但是,如果在同时拥有 GitHub 、GitLab、Coding 等账号的前提下,又怎样在同一台电脑上进行 ssh 配置呢?
多账号的 SSH 配置
这里的要点实际上就在 ssh-key 的配置上。在生成 ssh-key 的时候,也就是在运行下面这句生成 key 的命令时,是可以指定 key 的名称的:
$ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/github
后面的“-f ~/.ssh/github”就指定了此 key 的名称为 github 。实际使用中可以根据自己的需要进行 key 名称的设置。
按照这个生成方法依次生成需要用在各个平台下的 key ,然后将对应的 .pub 结尾的 key 文件内容完整复制到相应平台的 SSH 配置处。(不带“-f ~/.ssh/github”参数,直接运行也是可以根据提示一步步自定义 key 名称的)
之后的重点是——如何在本机识别不同的平台,并使用相应平台对应的 key 文件。
方法也很简单,只需要在 .ssh 文件夹下,新建一个 config 文件,config 文件中编辑如下内容:
Host Github主机别名 HostName github.com IdentityFile ~/.ssh/id_rsa_gitlab
Host GitLab主机别名 HostName gitlab.com IdentityFile ~/.ssh/id_rsa_github
Host Coding主机别名 HostName coding.net IdentityFile ~/.ssh/id_rsa_coding
其中,主机别名根据自己喜好自取,HostName 对应的是各个平台的主域名地址,之后的 key 名称则是在使用 ssh-keygen 命令生成相应 key 时候自定义的 key 名称。
在本机与平台端公共 key 都配置好后,分别使用相应的连接方法:
GitLab
ssh -T git@gitlab.com
GitHub
ssh -T git@github.com
Coding
ssh -T git@git.coding.net
与各个平台连接成功后,即可正常使用。
多账号配置后产生的问题
按照上面的方法配置后,实际上已经配置成功了,从对应仓库拉代码和提交更新都没有问题。但是,这里有一个细节需要注意。在默认情况下,大家配置 commit 的用户名称和邮件地址时都是使用的下面的方法:
git config --global user.name 你的用户名
git config --global user.email 你的邮箱地址
这个两个方法,因为带了参数 --global ,实际上定义的是全局变量,也就是说,不过你是向 GitHub、GitLab 还是 Coding 提交代码,作者名称和邮箱地址都是上面定义的两个。一般来说,这都不是大家想要的效果,最起码得区分开来。这里就需要在各个拉下来的本地代码仓库中找到 .git 文件夹中的 config 文件,其内容如下:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[user]
name = xxxx
email = xxxx
[remote "origin"]
url = xxxxxxxx
fetch = xxxxxxxx
在没有进行配置的默认情况下,是没有 [user] 这一项的,可以选择直接编辑这个文件,或者在当前代码仓库根目录运行局部配置命令,进行配置即可:
git config user.name 你的用户名
git config user.email 你的邮箱地址