# Mac下配置多个Git账户

# 应用场景

我们经常将代码托管到gitlab、github这样的网站,为了避免每次push代码都要输入用户名和 密码,通常回选择ssh协议,将公约保存到托管网站上。在实际开发中,往往要将代码托管到多个不同的网站上。比如公司的代码需要托管到gitlab,自己的开源代码托管到github上,每个托管站上都对应一个git账户。默认情况下,一台电脑的Git对应一个账户,只能网一个网站上push代码,非常不方便。这篇博客将介绍如何在一个终端中配置多个账户。同时管理多个托管网站的代码。

# 准备工作

首先,需要准备好对git的全局用户进行配置。在初次安装Git时,往往会使用如下命令配置全局用户名和邮箱。

git config --global user.name  'xxxx'   //配置全局的用户名,比如Github上注册的yonghuming
git config --global user.email  'xxxx'  // 配置全局邮箱,比如GitHub上配置的邮箱
1
2

这个--global选项,是只这里配置的user.name和user.email是像杜预全局进行配置的,即不同的Git仓库默认的用户名和邮箱都是这个值。由于需要管理多个账户,所以仅仅使用这个全局全局值是不够的,需要在每个仓库中单独配置。对此,有两种处理方法:

如果之前已经使用该命令进行配置,则先使用如下命令进行清楚

git config --global --unset user.name
git config --global --unset user.email
1
2

如果不确定是否已经配置过,可以使用下面的命令查看

git config --global user.name
git config --global user.email
1
2

# 1. 对每个账户生成一对密钥

首先进入保护密钥的目录:

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

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

ssh-keygen -t rsa -C "1352118502@qq.com"
1

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

Generating public/private rsa key pair.
Enter file in while to save the key (/Users/coco/.ssh/id_rsa):
1
2

这里要求对密钥进行命名,默认的文件是id_rsa。为了方便区分,我这里命名为id_rsa_github。接下来的提示都直接进行enter,直到密钥生成。通过ls命令,可以看到刚刚生成的密钥对id_rsa_githubid_rsa_github.pub。其中id_rsa_github.pub是公钥。

同样,对于GitLab上的账户,我是用另一个邮箱注册的,按照同样的步骤生成id_rsa_github的密钥对。接下来的步骤,除额外说明外,两个账户的操作完全相同。

# 2. 私钥添加到本地

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

ssh-add ~/.ssh/id_rsa_github // 将GitHub私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将GitLab私钥添加到本地
1
2

为了检验本地是否添加成功,可以使用ssh-add -l命令查看

# 3. 对本地密钥进行配置

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

touch config
1

文件的内容如下:

Host github
HostName github.com
User CoCoyh
IdentityFile ~/.ssh/id_rsa


Host gitlab
HostName gitlab.com
User CoCoyh
IdentityFile ~/.ssh/id_rsa_gitlab
1
2
3
4
5
6
7
8
9
10

# 4. 公钥添加到托管网站

以GitHub为例,先在本地复制公钥。进入ssh目录,使用cat id_rsa_github.pub查看生成的GitHub公钥,全选进行复制。

登陆GitHub,点击右上角头像选择settings,在打开的页面中选择SSH and GPG keys,至此,托管网站的公钥添加完成。总结来说,就是针对每个托管网站分别生成一对密钥,然后分别添加到本地和托管网站。这时候,可以测试一下是否成功,测试命令使用别名。例如,对于GitHub,本来应该使用的测试命令是:

ssh -T git@github.com
1

在config文件中,给GitHub网站配置的别名就是gitHub,所以直接使用别名,就是

ssh -T git@github
1