Git Config - 多帳號管理
安裝完 Git 之後,可以使用
git configCLI 取得 Git 設定組態參數,git config 是一個記錄了 git 操作的所有基本檔案資料。 比方說 :
- git init 創建時預設的 branch 名稱
- 寫 git commit 的顯示模板
- 當 push github 時的使用者資料
等等設定都可以在 git config 中調整修改。而在不同專案中,可能需要使用不同的 Git username 和 email, 例如個人專案中想使用「私人 Email」 ; 而在公司專案中則需要使用「公司 Email」,若每次切換專案時都要手動更改 Git 配置會十分麻煩。 這時 Git Include 可以根據資料夾自動套用對應的用戶設定,而無需每次手動調整。
Config CLI
git config CLI 取得 Git 組態參數被存放在:
/etc/gitconfig:整台電腦的所有用戶專案設定。 層級參數是--system~/.gitconfig:目前電腦用戶的所有專案共用設定。 層級參數是--global(常用)- 任何 repository 中的
.git/config:只有當前專案的設定 (常用)
當 config 設定衝突時,會以範圍小的優先( Local > Global > System )。
所以 .git/config 的設定優先權高於在 ~./gitconfig 裡的設定。
# 查詢目前所有設定值
git config --list
# 查詢特定項目的設定值
git config user.name
# 設定某值
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
# 刪除某項設定
git config --global --unset user.name
# 打開 vim 編輯
git config --global --edit
在「一台電腦使用多個 Git 帳號」的情況時, Git Config 就會需要調整,本篇文章紀錄一下:
Git 多帳號管理
初次使用 GitHub 時,大家都會先以 SSH 方式連接到 GitHub,並綁定唯一的公鑰,前面也有文章說明了 SSH。 另外可能會遇到需要管理更多的 GitHub 帳號的情況,這時就會遇到一個問題:「要如何讓一臺電腦同時管理多個 GitHub 帳號呢?」
includeIf
目前推薦的解決方案是使用 「includeIf」,它的邏輯是:「用資料夾分流」,這是 Git 官方後來支援的自動路由法。步驟如下:
創建專用資料夾
在電腦裡建立專用資料夾,例如:
~/projects/personal/(裡面的專案打算都用自己 github 帳戶~/projects/work/(裡面的專案要用公司的 github 帳戶
例如說 ~/projects/work/ 要用特定 Git 用戶資訊,就在此資料夾中新建一個 .gitconfig 檔案。
在裡面加入 Git 用戶資訊,也就是在這個 folder 下想要用的 email 與 name
[user]
name = company-name
email = company@company.com
接下來要把資訊和 config 做關聯。
使用 includeIf
打開全域設定檔 ~/.gitconfig,改成:
# 全域預設用主要帳號(例如個人帳號)
[user]
name = personal-name
email = personal@email.com
# 如果專案路徑在 ~/projects/work/ 底下,自動載入另一份設定
[includeIf "gitdir:~/projects/work/"]
path = ~/projects/work/.gitconfig
需要注意 .gitconfig 文件有後面配置覆蓋前面配置的特性。
所以要確保專用資料夾的設定生效,並且不被覆蓋,請將 includeIf 放在文件最後
上面是比較新的方法,以下也附上舊的做法,稱 「SSH Host 别名法」:
Step1. 先清除電腦裡「 Git 全域(Global)設定」裡面的 Git 使用者名稱與信箱
git config --global --unset user.name
git config --global --unset user.email
當 commit 時,Git 會自動附加上 name 和 email 訊息。
故若不把 「全域設定的使用者名稱與信箱」刪除,且在其他帳號要用的專案又忘記設定 local 身份時,Git 就會自動用這個全域的身份訊息去提交,導致 Commit 紀錄裡出現混亂的作者身份。 所以是建議要清除
Step2. 生成 SSH key,然後去 github 綁定並設定 ~/.ssh/config 內容
在 ~/.ssh 內生成 SSH key ,命名管理好並配置上 Github ,再來編輯 ~/.ssh/config:
# default
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/<key-1>
# 第二個帳戶,要建立 github 別名
Host two.github.com
HostName github.com
User user1
IdentityFile ~/.ssh/<key-2>
# 第三個帳戶,要建立 github 別名
Host three.github.com
HostName github.com
User user2
IdentityFile ~/.ssh/<key-3>
如果 SSH Key 都有配上 github 了,可以測試 ssh 連結,例如:
ssh -T git@two.github.com
# Hi two! You've successfully authenticated, but GitHub does not provide shell access.
# 出現這個表示連接成功
Step3. 克隆專案要記得用別名
將專案 clone 到本地要特別注意,因為上一步配置了 ~/.ssh/config 檔,所以我們 clone 的時候要用別名,例如:
# 錯誤:(在網頁上看常規的 SSH Clone 名稱會需要改一下)
git clone git@github.com:XXXX #(不能使用這個)
# 正確:(用別名地址下載)
git clone git@two.github.com:XXXX
Step4. 綁項目對應 git 帳號
由於前面有把 global 身份取消了,現在要針對各個專案來設定身份訊息,所以去到新下載的專案內,設定 config:
git config user.name XXXX
git config user.email YYYY
includeIf 和 SSH Host 比較
includeIf 目前比較推薦,這樣做的話,只要專案是下載到指定的資料夾,那就:
- 不需要去修改
.ssh/config裡的 Host 網址 - git clone 時可以完全照抄 GitHub 官方網址,直接下載
- Git 在 Commit 時就會會自動指定身份訊息;不需要再針對專案做特別預設
