一、背景说明
本人使用了多个 Git 托管平台,包括 Github、Gitlab 和 Gitee。为了避免提交信息(主要是用户名和邮箱地址)错乱,我希望在向不同的托管平台提交内容时,能够自动设置相应的用户名和邮箱地址。
二、解决方案
1. 常规做法
为每个 repo 单独设置用户名和邮箱地址。
操作步骤如下:在 repo 的根目录执行 git config user.name yourname && git config user.email [email protected]
。
但这种方法的缺点是操作繁琐,且极易遗忘。
2. 更好做法
使用 Git includeIf 给多个托管平台定义不同的配置。
Git includeIf 是 Git 2.13 版本引入的一个非常有用的特性,它允许你根据当前工作目录的位置来包含不同的 Git 配置。这个特性特别适合在不同的工作环境中使用不同的 Git 配置。例如,你可能在工作时使用你的工作电子邮件地址进行提交,而在家里则使用你的个人电子邮件地址。通过使用 git includeIf,你可以自动地根据当前的工作目录来切换这些配置。
三、includeIf 方案
1. 配置
(1)给每个托管平台指定保存的目录,如 Github、Gitlab 和 Gitee 平台的代码,我分别保存在D:\code\person\github\
、D:\code\work\gitlab\
和D:\code\person\gitee\
目录下。
(2)在 .gitconfig 配置文件中通过 includeIf 指定各托管平台指定目录对应的个性化配置。配置如下:
.gitconfig,该文件默认保存在用户根目录下,配置如下:
[includeIf "gitdir:D:/code/work/gitlab/"]
path = ~/.gitconfig-gitlab
[includeIf "gitdir:D:/code/person/gitee/"]
path = ~/.gitconfig-gitee
[includeIf "gitdir:D:/code/person/github/"]
path = ~/.gitconfig-github
~/.gitconfig-gitlab,该文件与 .gitconfig 同目录,配置如下:
[user]
name = gitlab-name
email = [email protected]
~/.gitconfig-gitee,该文件与 .gitconfig 同目录,配置如下:
[user]
name = gitee-name
email = [email protected]
~/.gitconfig-github,该文件与 .gitconfig 同目录,配置如下:
[user]
name = github-name
email = [email protected]
说明: Windows 系统中,.gitconfig 配置中需将 gitdir 路径分隔符由反斜杠\
转为 正斜杆 /
,如:D:\code\person\github\
转为 D:/code/work/gitlab/
。
2. 验证
在各托管平台指定目录下任意 repo 执行以下脚本验证:
git config user.name
git config user.email
九、参考资料
Organizing multiple Git identities
docs git-config
评论区