场景说明

张三在某IT公司工作,但他自身还是某开源软件的参与者。当前张三参与两类git仓库的开发。

  • 开源类仓库
  • 公司类仓库

但张三想以 zhangsan@gmail.com 的身份提交到开源类仓库,以 zhangsan0119@公司.com 的身份提交到公司类仓库。

配置

参考资料可知

  • git config --global user.email=xxx配置的是全局的,显然不行。
  • 不使用全局,每个仓库中单独配置 git config user.email=xxx,当仓库较少时可行,较多时就太傻了。
  • Git 在2.13版本时引入了一个名为 “按条件引入”(Conditional includes) 的功能。即今天要谈的主角——“includeIf”

最终做法是:

  • 张三在D盘下创建code目录,再在code目录下创建open-source目录和work目录
  • 确保~/.gitconfig文件已存在,同时创建~/.gitconfig_open_source和~/.gitconfig_work两个文件
  • 将~/.gitconfig文件中的
[user]
    email = xxx@xxx.com
    name = xxxx

删除。

  • 在~/.gitconfig文件中追加添加
[includeIf "gitdir/i:d:/code/work/"]
    path = ~/.gitconfig_work
[includeIf "gitdir/i:d:/code/open-source/"]
    path = ~/.gitconfig_open_source
  • 在~/.gitconfig_open_source中添加如下
[user]
    email = zhangsan@gmail.com
    name = zhangsan
  • 在~/.gitconfig_work中添加如下
[user]
    email = zhangsan0119@公司.com
    name = zhangsan
  • 配置完毕,试着提交代码吧

说明

[includeIf "gitdir/i:d:/code/open-source/"]
    path = ~/.gitconfig_open_source
  • gitdir/i 当提交的仓库的目录在右侧目录下时,条件就生效,/i指不区别大小写
  • d:/code/open-source/ 指windows系统下的某一个目录,注意要以/结尾,以/结尾和以/**结尾是等同的

参考