0%

[Git] 設定不同路徑或單一 Repo 擁有各自的作者資訊

前言

Git 起手式中很重要的一件事就是設定作者資訊,因為不同的專案想要顯示的作者資訊可能會想要不同。例如:自己的專案當然就是以個人的 E-Mail 作為作者資訊,但公司的專案可能就會需要以公司的 E-Mail 來顯示。這裡記錄如何設定預設作者資訊、特定路徑預設的作者資訊、單一 Repo 作者資訊。

預設作者資訊設定

預設的作者資訊會儲存在家目錄中的 .gitconfig (即 ~/.gitconfig),因此修改預設作者資訊的方法有兩個,一個是透過 Git 指令修改該檔案,一個則是直接修改檔案本身。這裡演示的是如何透過指令修改,修改檔案的部分只需要將 ~/.gitconfig 修改如同指令產生的結果即可

1
2
3
4
5
6
7
$ git config --global user.name "Wei-Ren Xue"           # 修改預設的作者名稱
$ git config --global user.email "weirenxue@gmail.com" # 修改預設的作者 E-Mail
$ cat ~/.gitconfig # 查看 ~/.gitconfig
# This is Git's per-user configuration file.
[user]
name = Wei-Ren Xue
email = weirenxue@gmail.com

這樣的情況下,在任何 Repo 中預設的作者資訊已被設定完成,所以 Commit 的作者資訊都會被壓成 Wei-Ren Xue <weirenxue@gmail.com>

1
2
3
4
5
6
% git log
commit e41ae7ce8730d54e90f2115b325c4cea6c56bf2e (HEAD -> master)
Author: Wei-Ren Xue <weirenxue@gmail.com>
Date: Sat Jan 22 13:33:02 2022 +0800

init

可以透過 --show-origin 知道我們的作者資訊從何而來

1
2
3
4
$ git config --show-origin user.name
file:/Users/wrxue/.gitconfig Wei-Ren Xue
$ git config --show-origin user.email
file:/Users/wrxue/.gitconfig weirenxue@gmail.com

特定路徑預設的作者資訊設定

這時候就會想到:會不會每次要 Commit 到公司專案時,就要使用一次 git config --global 重設資訊,要 Commit 自己的專案時又要再執行一次指令,這樣超麻煩!

幸好,Git 提供 Conditional includes 讓我們可以在指定的情況使用指定的 .gitconfig。現在假設公司的專案都會放在 ~/company 目錄底下,並且在該目錄底下創建一個 .gitconfig

1
2
3
4
# ~/company/.gitconfig
[user]
name = Wei-Ren Xue
email = weirenxue@company.com

~/.gitconfig 檔案中加入下方內容,意思是只要在路徑為 ~/company 底下的 Repo 預設都會使用 path 指定的設定檔 (此為 ~/company/.gitconfig)

1
2
[includeIf "gitdir:~/company/**"]
path = ~/company/.gitconfig

同樣地,可以透過 --show-origin 知道我們的作者資訊從何而來。當然,執行指令之前,需要先進入 ~/company 目錄下的 Repo 才能看得出來差異哦!

1
2
3
4
5
$ git config --show-origin user.name
file:/Users/wrxue/company/.gitconfig Wei-Ren Xue
$ git config --show-origin user.email
file:/Users/wrxue/company/.gitconfig weirenxue@company.com
(venv) wrxue@m testgit %

單一 Repo 作者資訊設定

預設作者資訊設定、特定路徑預設的作者資訊設定這兩種設定方式都理解後,設定單一 Repo 作者資訊的原理也是同樣的,每個 Repo 中都有屬於自己的設定檔案,即為 Repo 底下的 .git/config。相同地,可以使用指令或直接更新檔案內容的方式達到設定作者資訊的修改。記住:需要先到 Repo 目錄中再執行指令

1
2
3
4
5
6
7
8
9
10
11
$ git config user.name "Wei-Ren Xue"
$ git config user.email "weirenxue@one-repo.com"
$ cat .git/config
[user]
name = Wei-Ren Xue
email = weirenxue@one-repo.com

$ git config --show-origin user.name
file:.git/config Wei-Ren Xue
$ git config --show-origin user.email
file:.git/config weirenxue@one-repo.com

有沒有覺得很眼熟?沒錯,就是比預設作者資訊設定少 --global 而已!

修正 Commit 後的 Author 資訊

Commit 後發現不小心使用錯誤的作者資訊怎麼辦?有一個補救的辦法,使用下方指令便能修正,但這個補救方式僅限於最新的 Commit 適用。所以建議在 Commit 之前還是多多使用 --show-origin 來確認當前的作者資訊是什麼吧!

1
$ git commit --amend --reset-author

設定檔載入的優先順序

可以用一個比較容易的方式記憶,就是影響的範圍越小,順序越前面。

因此 Git 會先載入 .git/config 查看有沒有需要的資訊,若無才再找看看有沒有設定 ~/your/path/.gitconfig,都沒有的話最後才是使用 ~/.gitconfig 內的資訊。

參考文獻

  1. 開始 - 初次設定 Git
很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵