引言
一般来说,安装好 git 后,我们都会配置一个全局的 config 信息,就像这样:
git config --global user.name "anin"
git config --global user.email "1119772098@qq.com"
但是你可能会碰到需要在一台电脑上配置多个用户信息的需求。此时就不能够用一个全局配置搞定一切了。
比如因为我的个人电脑出了问题,我想要提交我的个人项目时,只能用公司配的电脑去提交。而公司的电脑配置的是私有的 gitlab 仓库,而我自己的项目存储在 gitee 上。这两个仓库不仅仓库地址不一样,仓库的用户名和邮箱都不一样。
配置多用户
本文将配置分别是 gitee 以及 aliyun云效 上的两个用户,并分别在它们所属的项目上进行 git 操作,这差不多就是配置多用户的大部分操作了。
gitee | 云效 | |
---|---|---|
用户名 | anin | cln |
邮箱 | 1119772098@qq.com | cln@dingtalk.com |
设置全局配置
和引言一样配置,但是这里要注意的是,如果设置了全局配置,那么后面git提交默认的就是这个配置,除非有制定local级别的配置。
所以尽量把常用的账户设置为全局,然后对于不常用的,在仓库里设置local级别的配置,这就是本文的思路。
这是因为 git 的配置分为三级别,System —> Global —>Local。System 即系统级别,Global 为配置的全局,Local 为仓库级别,优先级是 Local > Global > System。
git config --global user.name "anin"
git config --global user.email "1119772098@qq.com"
生成钥对
钥对的保存位置默认在 ~/.ssh
目录下,我们先清理下这个目录中已存在的钥对信息,即删除其中的 id_rsa
、id_rsa.pub
之类的公钥和密钥文件。
首先我们开始生成 gitee 上的仓库钥对,通过 -C 参数填写 gitee 的邮箱:
ssh-keygen -t rsa -C “1119772098@qq.com”
按下 ENTER 键后,会有如下提示:
Generatingpublic/privatersa key pair.Enter fileinwhich to save the key (/Users/anin/.ssh/id_rsa):
在这里输入公钥的名字,默认情况是叫 id_rsa
,为了和后面的 gitlab 配置区分,这里输入 anin_id_rsa
。输入完毕后,一路回车,钥对就生成完毕了。
下面开始生成 yunxiao 上的仓库钥对,步骤和上面一样:
ssh-keygen -t rsa -C “cln@dingtalk.com”
添加 SSH Keys
添加私钥
在上一步中,我们已经将公钥添加到了 gitee 或者 云效 服务器上,我们还需要将私钥添加到本地中,不然无法使用。添加命令也十分简单,如下:
ssh-add ~/.ssh/anin_id_rsa // 将 gitee 私钥添加到本地
ssh-add ~/.ssh/dingtalk_id_rsa // 将 yunxiao 私钥添加到本地
添加完毕后,可以通过执行 ssh-add -l
验证下,如果都能显示出来和下面一样,就 OK 了。
anin@anin ~ % ssh-add -l
3072 SHA256:COUusa0tC4CGZwPOoNlBo+pZdskMAvfVDx/25dwQyFo 1119772098@qq.com (RSA)
3072 SHA256:ewIS7h6u63DZpThpN9CRM/lK5deQwkpe//UfyMccFuc chenglining5747@dingtalk.com (RSA)
这里最近发现了一个问题,解决方案更在这里:mac重启之后ssh-add的记录会丢失
管理密钥
通过以上步骤,公钥、密钥分别被添加到 git 服务器和本地了。下面我们需要在本地创建一个密钥配置文件,通过该文件,实现根据仓库的 remote 链接地址自动选择合适的私钥。
编辑 ~/.ssh 目录下的 config 文件,如果没有,请创建。
vim ~/.ssh/config
配置内容如下:
Host gitee
HostName gitee.com
User anin
IdentityFile ~/.ssh/anin_id_rsa
Host yunxiao
HostName code.aliyun.com
User cln
IdentityFile ~/.ssh/dingtalk_id_rsa
该文件分为多个用户配置,每个用户配置包含以下几个配置项:
Host:仓库网站的别名,随意取
HostName:仓库网站的域名(PS:IP 地址应该也可以)
User:仓库网站上的用户名
IdentityFile:私钥的绝对路径
注: Host 就是可以替代 HostName 来使用的别名,比如我 github 上某个仓库的 clone 地址为:
git@gitee.com:anin/study.git
那么使用 Host 后就是:
git@gitee:anin/study.git
检测
可以用 ssh -T 命令检测下配置的 Host 是否是连通的:
anin@anin .ssh % ssh -T git@gitee
Hi Anin! You've successfully authenticated, but GITEE.COM does not provide shell access.
anin@anin .ssh % ssh -T git@yunxiao
Welcome to GIT, cln!
仓库配置
恭喜你!完成以上配置后,其实你已经基本完成了所有配置。分别进入附属于 github 和 gitlab 的仓库,此时都可以进行 git 操作了。
但是别急,如果你此时提交仓库修改后,你会发现所有提交的用户名变成了你的全局配置。
因此我们需要为每个仓库单独配置用户名信息,假设我们要配置 github 的某个仓库,进入该仓库后,执行:
git config --local user.name "cln"
git config --local user.email "cln@dingtalk.com"
执行完毕后,通过以下命令查看本仓库的所有配置信息:
git config --local --list
至此你已经配置好了 Local 级别的配置了,此时提交该仓库的代码,提交用户名就是你设置的 Local 级别的用户名了。