日常开发过程中,我们的git交互可能有公司内部的gitlab以及公共的github,这个时候两边推送使用的用户以及邮箱可能不一样,因此不能用同一份配置来推送,本文说一下解决方案。
解决方案网上有好几种,这里记录一种配置相对简单的方式,就是利用配置文件的includeIf
参数。
添加如下配置到 ~/.gitconfig
:
$ cat ~/.gitconfig
[includeIf "gitdir:/Users/liqilong/eryajf/github/"]
path = ~/.gitconfig_github
[includeIf "gitdir:/Users/liqilong/eryajf/gitlab/"]
path = ~/.gitconfig_gitlab
[includeIf "gitdir:/Users/liqilong/eryajf/letsgo/project/src/"]
path = ~/.gitconfig_gitlab
注意路径结尾要以 /
结尾,表示此目录下所有项目应用下边path指定的配置文件。
然后再定义两个path对应的配置文件:
$ cat ~/.gitconfig_gitlab
[user]
name = 李启龙
email = [email protected]
[filter "lfs"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
另外一个:
$ cat .gitconfig_github
[user]
name = eryajf
email = [email protected]
[filter "lfs"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
然后分别在两个目录中创建项目进行测试,发现推送的用户就变成对应定义的了。
上边举的例子是在不同代码托管站的多配置维护方案,还有一种情况是,如果我们在GitHub有多个账号,此时怎样维护才更加省心一些呢。
有的同学可能想到用户名和邮箱可以套上边的方式进行配置,的确可以,但是有一个问题绕不过去,那就是在GitHub中,同一个秘钥不能添加到不同用户账号中,
鉴于这种情况,就必须要给不同账号配置不同的秘钥对了。
网上很多地方给的方案建议修改 ~/.ssh/config
来指定不同的秘钥,但交互的时候还需要手动修改一些内容,其实也麻烦,接下来这里介绍一种相对省心的方案。
假如我有两个GitHub账号:eryajf和lql95。
然后在本地电脑有两对秘钥:
$ cd ~/.ssh
$ ssh-keygen -f "github-liql"
$ ssh-keygen -f "github-eryajf"
把公钥添加到账号的setting中这个就不介绍了,主要说一下本地的配置信息。
定义如下内容在 ~/.gitconfig
文件:
$ cat ~/.gitconfig
[includeIf "gitdir:/Users/liqilong/eryajf/github-lql95/"]
path = ~/.gitconfig_github_lql95
[includeIf "gitdir:/Users/liqilong/eryajf/github-eryajf/"]
path = ~/.gitconfig_github_eryajf
然后再定义两个path对应的配置文件:
$ cat ~/.gitconfig_gitlab_lql95
[user]
name = lql95
email = [email protected]
[filter "lfs"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
[core]
sshCommand = "ssh -i ~/.ssh/github-liql"
另外一个:
$ cat .gitconfig_github_eryajf
[user]
name = eryajf
email = [email protected]
[filter "lfs"]
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
[core]
sshCommand = "ssh -i ~/.ssh/github-eryajf"
就是通过添加 sshCommand
实现不同配置中采用不同的秘钥,实测这种方案是最优雅好用的!