场景说明
张三在某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系统下的某一个目录,注意要以/结尾,以/结尾和以/**结尾是等同的