一、背景說明
本人使用了多個 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