之前在公司的问答平台上解答了一个有关 git 多个远程仓库需要制定不用用户名或者用户邮箱的问题。原本以为是随口一答的问题,没想到之后该回答连续几个月一直有新增的点赞,说明会遇到这个问题的人还不少。所以把答案整理一下也发在博客一份。
问题场景:
所有需要针对不同的仓库设置不同的用户名称或者用户邮件的场景。包括但不限于:
- 公司仓库要用一组用户名和邮箱,外网仓库要用一组用户名和邮箱
- github 的仓库要用一组邮箱(github 用来保护用户隐私的邮箱)、gitlab 的仓库要用另一组邮箱
- ……
有人说,我可以在项目仓库下 git config user.email
针对单个仓库设置啊。是的,可以,但是当你有大量的仓库需要管理的时候,你就会感到痛苦了。我们要达到的目标是做一次性的设置,以后新建仓库都会自动适用对应的信息,不只限于 "user.name" 和 "user.email".
解决方案
前提条件:git客户端版本大于 2.13
首先,假设:
- 你已经全局配置了公司邮箱和名称
user.name = xxxxx
,user.email = [email protected]
- 你在
E:\codes
下存放所有的 git repos。 - 现在你要为 gitlab 和 github 分别设置不同的用户邮箱:
- Gitlab: "[email protected]"
- Github: "[email protected]"
现在建立两个特殊的目录:
E:\codes
├── gitlab // 专门用于存放托管在 gitlab 的代码仓库
├── github // 专门用户存放托管在 github 的代码仓库
打开git的全局配置文件(一般是在 C:\Users\{用户名}\.gitconfig, Mac 下是在 /Users/{用户名}/.gitconfig),增加两段配置,如下(第 5 行起的部分):
[user]
name = xxxxx
email = [email protected]
+ [includeIf "gitdir:codes/github/"]
+ path = ./.github
+
+ [includeIf "gitdir:codes/gitlab/"]
+ path = ./.gitlab
在全局 .gitconfig 文件夹相同的位置,创建 .github 和 .gitlab 文件,内容如下:
# .github
[user]
email = [email protected]
# .gitlab
[user]
email = [email protected]
这样配置以后,如果你是在 E:\codes\gitlab 下的某个项目时,你的 email 是 [email protected],如果你是在 E:\codes\github 下的某个项目时,你的 email 是 [email protected],其它情况下,是 [email protected].
当然除了 user.email 之外,你也可以针对性地指定其它配置项,包括但不限于 commit.gpgsign、user.signingkey.
原理
以上方法使用到的其实是 git 本身的 "Conditional Includes" 功能,根据不同的情况包含不同的配置文件。这里用到的是基于路径的条件。
有关于 "Conditional Includes" 的更多介绍,请查阅官方文档。
作者:小李刀刀
原文链接:多个远程仓库, 如何自动设置不同邮箱或用户名
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。