对于同时在写开源项目和公司私有项目的码农,不同的项目可能就需要选择不同的邮箱。

最直接的方案是给每个 repo 设置一遍,毕竟 Git 自带了 --local --global --system 三个级别的设置。我之前的办法就是 global 写个人邮箱,然后写一个脚本用于设置当前项目的邮箱为公司邮箱(大概如下),放在 PATH 下,每新建 / clone 一个 repo 的时候跑一遍。

# git-init.sh or git-init.ps1
git config --local user.email your.work@company.com
git config --local user.name  "Your Name"

当然,坏处也是十分显然的,每个公司项目都得设置一遍,很容易忘记。于是就有了这篇博客。

Git 对于这种“根据路径设置邮箱名”的需求,在 git config 里提供了 IncludeIf 参数 (opens new window)(似乎大小写不敏感)。

# ~/.gitconfig
[user]
	email = lyh543@outlook.com
	name = lyh543
[includeIf "gitdir:bitme/"] # 路径必须以短横线结尾
    path = .bitme.gitconfig
[pull]
	rebase = true
[diff]
	submodule = log
[init]
	defaultbranch = master
[http]
	proxy = http://127.0.0.1:17296
[https]
	proxy = http://127.0.0.1:17296
[core]
	editor = code --wait
	autocrlf = input

上面这段 includeIf 的意思是,如果当前 repo 路径包含 bitme/,就读取 .bitme.gitconfig(也可以叫其他名字)并进行设置。注意对相同项的重复设置,以最后一次为准

然后我们再写一个 ~/.bitme.gitconfig

# ~/.bitme.gitconfig
[user]
	email = email@bitme.fun
	name = Yanhui Liu

就可以一劳永逸了。


但是还没有完全一劳永逸,按照这个写法,每次得写两个 .gitconfig,而且这个格式还是有点麻烦。

但是万能的 Git 想到了这一点!

阅读文档可以发现,git config 除了 --system --global --local 以外,还支持 --file 参数,可以指定一个文件来 读/写 配置。那直接把上面的代码变成脚本就 ok 了。

# git-init.sh or git-init.ps1
git config --global user.email                      lyh543@outlook.com
git config --global user.name                       lyh543
git config --global includeif.gitdir:bitme/.path    .bitme.gitconfig
git config --global pull.rebase                     true
git config --global diff.submodule                  log
git config --global init.defaultbranch              master
git config --global http.proxy                      http://127.0.0.1:17296
git config --global https.proxy                     http://127.0.0.1:17296

git config --global core.editor                     code --wait
git config --global core.autocrlf                   input

git config --file .bitme.gitconfig user.email       email@bitme.fun
git config --file .bitme.gitconfig user.name        Yanhui Liu

最后就是脚本怎么办了。你可以尝试维护一个 repo 专门放各种脚本(公有、私有随意)。每次换新电脑 / 重装系统,挂完梯子第一件事就是把仓库 clone 下来,然后加到 PATH 里。

偷偷放一个链接 (opens new window)