在公司使用 GitLab,平时个人使用 Github,git 提交时候附带 user.name,user.email 不同。git 可以通过 –global 设置全局 Name,Email,然后在每个项目中可以指定特定的 Name,Email。但是,每拉一个公司新项目都要单独设置,有点麻烦。所以我考虑配置自动化一下,最好有 hook 在提交时候检测不同的 remote 地址要求相对应的 Name,Email,如果错误就提交失败。
编辑 .gitconfig 文件,将其中 [user] 下内容改为如下,其他内容不变,可以配置多个 includeIf
[user]
name = aaa
email = aaaa@aaa.com
useConfigOnly = true
[includeIf "gitdir:你的项目绝对地址1/**"]
path = ~/.gitconfig-company
[includeIf "gitdir:你的项目绝对地址2/**"]
path = ~/.gitconfig-company
在 .gitconfig 同级建一个 .gitconfig-company 文件,内容如下
[user]
name = bbb
email = bbbb@bbb.com
大功告成。在不同的文件夹下使用 git config user.name 验证一下。
执行下面命令
mkdir -p ~/.git-hooks
vim ~/.git-hooks/pre-commit
chmod +x ~/.git-hooks/pre-commit
git config --global core.hooksPath ~/.git-hooks
复制下面内容到刚才的文件内,记得修改文件中的两个邮件地址,或者按照自己的需求修改判断逻辑
#!/bin/sh
email="$(git config user.email)"
remote="$(git remote -v | head -n 1)"
company_email="aaaa@aaa.com"
personal_email="bbbb@bbb.com"
case "$remote" in
*gitlab* )
if [ "$email" != "$company_email" ]; then
echo "❌ 公司仓库必须使用公司邮箱:$company_email"
echo "当前邮箱:$email"
exit 1
fi
;;
*github.com* )
if [ "$email" != "$personal_email" ]; then
echo "❌ GitHub 仓库必须使用个人邮箱:$personal_email"
echo "当前邮箱:$email"
exit 1
fi
;;
esac
exit 0