個性化定義多個 Git 託管平臺配置

曾左發表於2024-04-02

一、背景說明

本人使用了多個 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

相關文章