代码改变世界

个性化定义多个 Git 托管平台配置

2024-04-02 20:29  曾左  阅读(370)  评论(0编辑  收藏  举报

一、背景说明

本人使用了多个 Git 托管平台,包括 Github、Gitlab 和 Gitee。为了避免提交信息(主要是用户名和邮箱地址)错乱,我希望在向不同的托管平台提交内容时,能够自动设置相应的用户名和邮箱地址。

二、解决方案

1. 常规做法

为每个 repo 单独设置用户名和邮箱地址。

操作步骤如下:在 repo 的根目录执行 git config user.name yourname ; git config user.email yourname@email.com.cn

但这种方法的缺点是操作繁琐,且极易遗忘。

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 = gitlab-name@mail.com.cn

~/.gitconfig-gitee,该文件与 .gitconfig 同目录,配置如下:

[user]
    name = gitee-name
    email = gitee-name@mail.com.cn

~/.gitconfig-github,该文件与 .gitconfig 同目录,配置如下:

[user]
    name = github-name
    email = github-name@mail.com.cn

说明: Windows 系统中,.gitconfig 配置中需将 gitdir 路径分隔符由反斜杠\ 转为 正斜杆 /,如:D:\code\person\github\ 转为 D:/code/work/gitlab/

2. 验证

在各托管平台指定目录下任意 repo 执行以下脚本验证:

git config user.name

git config user.email

四、补充说明

以此类推,善用 includeIf, 不仅能自定义多个托管平台的提交信息,也能进行其他类似的个性化设置。

九、参考资料

Organizing multiple Git identities

docs git-config