由于 Git 所具有的巨大优越性,越来越多的公司以及个人开始由 Svn 转向 Git 。一般来讲,每位员工都会被分配给一个公司内部的邮箱。比如一个 996 公司的员工 “张三”,获得的可能就是一个 “[email protected]” 的邮箱。比较规范的公司,就会要求我们使用自己的名字和公司所分配给自己的这个邮箱来配置 Git(姓名和邮箱可以不用引号括起来):
git config --global user.name "张三"
git config --global user.email "[email protected]"
但是这种配置是全局的,如果我们之前刚好有在 GitHub 上维护项目,那这样势必就会将之前所做的 Git 账户配置给覆盖了。那怎么解决呢?我们总不能来回覆盖,来回添加密钥吧。我们能不能同时配置多个 Git 账户呢?
因为工作学习需求,我有多个github和gitee以及其他git平台的账号,但git默认情况下只能设置一个gloub全局用户
这让我切换多个账号时感到十分麻烦,接下来给大家分享一下我的方法:
1. 清空默认的全局 user.name 和 user.email
git config --global --unset user.name
git config --global --unset user.email
查看git配置: git config --global --list
2.生成各账号专用ssh私钥公钥
以 “张三” 为例,首先,我们需要根据公司邮箱来生成密钥对:
ssh-keygen -t rsa -C "[email protected]"
回车后会出现下面这句话:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/zhangsan/.ssh/id_rsa):
这时候可千万别一路回车,注意看提示,这里要我们输入要保存的私钥的路径和文件名,为了以后易找,我们就仍然放在该路径下,只不过更改个跟平台相关的文件名,输入:
#示例,根据具体路径修改
/Users/zhangsan/.ssh/996icu_id_rsa
接着就可以一路回车了,默认密码为空即可。
生成完密钥之后,我们还需要使用ssh-add
命令是把专用密钥添加到ssh-agent
的高速缓存中。该命令位置在/usr/bin/ssh-add
,用法如下:
#进入ssh-agent
ssh-agent -s
#添加私钥
ssh-add ~/.ssh/996icu_id_rsa
之后我们需要将生成的密钥对中的公钥里的内容用文本编辑器打开,复制下来,添加到对应的平台上面,比如公司的 GitLab 或者 GitHub 等。
3.多账户设置方法
3.1设置私钥根据域名自动选择
我们可以直接使用域名解析,设置每个平台默认的用户和ssh密钥
这种需求很常见,打开 ~/.ssh/config
文件(没有可以新建一个)配置如下:
Host one.github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_one.id_rsa
Host two.github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_two_id_rsa
Host gitlab.com
Hostname gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa
进行测试
ssh -T two.github.com
到这里,多账号的配置基本上已经完成了,
3.2.设置自动切换git提交用户名与email
但是还有一个不足的地方就是虽然私钥根据域名自动选择了,但是提交的配置还是共享 .gitconfig
中的配置,例如 user.name 和 user.email,能不能根据仓库所在的不同位置选择不同的全局配置文件呢?答案是可以的,打开 ~/.gitconfig
文件,在末尾添加下面的配置:
[includeIf "gitdir:~/work/gitlab/"]
path = .gitconfig-gitlab
然后再建一个 ~/.gitconfig-gitlab
文件,里面写全局配置,例如:
[user]
name = zhansan
email = [email protected]
那么只要仓库被放到了 ~/work/gitlab
目录下面,默认就会使用这个配置了!
Comments NOTHING