Git多账号配置

Git多账号配置

背景

简单说一下背景,最近入职了新公司,在配置Git环境遇到一些小问题:新公司每个人都有自己的英文名以及企业邮箱,我想把Git的user.name以及user.email改成自己的英文名和邮箱,但是我原先的Git配置一直采用的是全局配置,在GitHub上也会维护一些自己的项目代码,例如:

git config --global user.name "wenwl" // 配置全局用户名
git config --global user.email "[email protected]" // 配置全局邮箱

此外,公司使用是GitLab两者仓库地址也不同,显然目前的配置不符合要求。

简单来说,就是当需要在一台PC上配置多个Git用户信息,不能够用一个全局配置搞定。

配置多账号

例如上述所说,我在GitHub以及公司GitLab的Git用户信息如下:

# GitHub
user.name "wenwl" 
user.email "[email protected]" 
# GitLab
user.name "jack.wen"
user.email "[email protected]"

配置多账号步骤如下:

1. 清除全局配置

首先,清空全局配置对用户信息,然后可以通过git config --global --list查看全局配置信息,是否清空成功。

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

2. 生成密钥对

默认情况下,密钥对保存路径为~/.ssh ,根据自己的情况,判断选择是否全部清空密钥对(id_rsa、id_rsa.pub 这些公钥和密钥文件),我这里是懒得更改旧的GItHub配置(用的是默认命名的文件),所以没删除,生成公司GitHub使用的密钥对:

ssh-keygen -t rsa -C "[email protected]"

如果熟悉生成密钥对的知道执行该命令后需要进行3次或4次确认:

  • 重点这一步:确认秘钥的保存路径,这里我们不采用默认命名id_rsa,增加一些后缀以便区分,例如改成id_rsa_gitlab

    Enter file in which to save the key (/Users/wenwl/.ssh/id_rsa):/Users/wenwl/.ssh/id_rsa_gitlab
    
  • 如果上一步保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖)

  • 创建密码(如果不需要密码则直接回车)

  • 确认密码

如果你有多个仓库,重复上面的步骤即可,重点就是更改秘钥名称!,例如github的可以改成id_rsa_github

3. 配置公钥到SSH Keys 中

这里默认认为你懂得如何配置,只需要上面生成的公配置到对应的仓库中,例如id_rsa_gitlab.pub配置到GitLab,id_rsa_github.pub配置到GitHub。

我这里只重新生成了新公司GitLab要用的密钥对,所以只配置了GitHub 的 SSH Keys。

4. 配置本地私钥

配置本地私钥命令参考如下:

ssh-add ~/.ssh/id_rsa_gitlab
# ssh-add ~/.ssh/id_rsa_github 如果生成了github的私钥,你再添加即可

可以使用ssh-add -l 查看配置的私钥信息。

上面的命令只是私钥添加到本地,我们还需要做一个配置,告诉Git不同的仓库具体使用的是哪个密钥和用户信息:

编辑~/.ssh 目录下的config文件,如果没有,请创建:

vi ~/.ssh/config
# p配置参考如下
Host github
HostName github.com
User wenwl
IdentityFile ~/.ssh/id_rsa

Host xxx-gitlab # 仓库别名,随意取, 同时可以替代 HostName 来使用的别名
HostName git.xxx.com # 仓库的域名或者IP
User jack.wen # 用户名
IdentityFile ~/.ssh/id_rsa_gitlab # 私钥的绝对路径

# ......

上面注释说到,Host是可以替代 HostName 来使用的别名,例如:

# github有个仓库的克隆地址为:
[email protected]:wwllong/blog.git
# 如我上面的config配置,可以等价于
git@github:wwllong/blog.git

可以通过ssh -T检测配置的 Host 是否是连通:

ssh -T git@github.com
Hi wwllong! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T git@gitlab.xxx.com
Welcome to GitLab, @jack.wen

5. 仓库配置

完成上面的配置后,我们还需要给本地仓库配置用户名和邮箱,否则可能无法提交本地修改或者提交的用户名变成了系统主机名。

这是因为Git的配置分为三级:System(系统)、 Global (全局)、Local(仓库级别),优先级是 Local > Global > System。由于一开始清除了全局的用户名,又没有给本地仓库配置用户信息,所以会出现这种情况。

配置也很简单,进入到对应的仓库后目录后,执行以下命令即可,例如,我入职新公司拉下的项目配置的命令

git config --local user.name "jack.wen"
git config --local user.email "[email protected]"

可以执行git config --local --list查看本地仓库配置的信息。

至此,Git多账号的配置告一段落。

你可能感兴趣的:(Git,git,github,ssh)