git-config配置多使用者環境以及 includeIf用法
阿新 • • 發佈:2021-12-16
git-config配置多使用者環境以及 includeIf用法
背景
開發人員經常遇到這樣的問題,公司倉庫和個人倉庫的使用者名稱和郵箱配置是有區別的,為了能夠很好地區分工程上傳到不同的遠端倉庫,我們需要分別處理,保證在不同的工程使用不同的賬戶
介紹
-
Git支援多級配置,分別是
system(系統級)
、global(使用者級)
、local(專案級)
和worktree(工作區級)
-
配置優先順序:
worktree > local > global > system
-
在Linux環境中,分別對應
-
system
/etc/gitconfig
: 系統級配置檔案;對系統中所有使用者都普遍適用的配置。使用git config --system
讀寫的就是這個檔案。
-
global
~/.gitconfig
: 使用者級配置檔案;使用者目錄下的配置檔案只適用於該使用者。使用git config --global
讀寫的就是這個檔案。
-
local
$RepoPath/.git/config
: 專案級配置檔案;當前專案的 git倉庫目錄中的配置檔案(也就是工作目錄中的.git/config
檔案),這裡的配置僅僅針對當前專案有效。使用git config --local
local引數
,讀寫的就是這個檔案。
-
worktree
: 工作區級配置;此配置僅僅針對當前工作區有效。使用git config --worktree
進行配置。note
:- 每一個級別的配置都會覆蓋上層的相同配置,所以
.git/config
裡的配置會覆蓋/etc/gitconfig
中的同名變數。 $RepoPath
為某倉庫的本地路徑
- 每一個級別的配置都會覆蓋上層的相同配置,所以
-
-
在 Windows 系統上
- Git 會找尋使用者主目錄下的
.gitconfig
檔案。主目錄即$HOME變數
指定的目錄,一般都是C:\Documents and Settings\$USER
。此外,Git 還會嘗試找尋/etc/gitconfig
- Git 會找尋使用者主目錄下的
配置
-
常規用法
-
全域性配置
-
方法一: 在
~/.gitconfig
檔案中新增使用者名稱
和郵箱
-
方法二: 配置全域性的
使用者名稱
和郵箱
git config --global user.email "[email protected]" git config --global user.name "Your Name"
-
-
專案倉庫配置
-
方法一: 在
$RepoPath/.git/config
檔案中新增使用者名稱
和郵箱
-
方法二: 配置專案的
使用者名稱
和郵箱
# 進入 $RepoPath目錄,並執行 git config --local user.email "[email protected]" git config --local user.name "Your Name"
-
-
-
includeIf
用法:可以在git的配置檔案中使用
include
和includeIf
關鍵字來包含其它配置檔案,git在解析配置檔案時,會將被包含的配置檔案的內容內聯到 包含指令 所在的位置;所以,被包含的配置檔案的配置項會覆蓋包含指令之前的配置項,包含指令之後的配置項會覆蓋被包含的配置檔案的配置項,即,優先順序是:包含指令後面的配置項 > 被包含的配置檔案的配置項 > 包含指令之前的配置項
;-
示例
[include] path = /path/to/foo.inc ; # 絕對路徑 path = foo.inc ; # 相對路徑,相對於當前的配置檔案 path = ~/foo.inc ; # 相對使用者目錄 `$HOME` 路徑
-
gitdir
和gitdir/i
# 當倉庫所在目錄包含gitdir之後的路徑才會使用.inc檔案 [includeIf "gitdir:/path/to/foo/.git"] path = /path/to/foo.inc # 所有倉庫目錄在gitdir之後的路徑下的,都會使用.inc檔案 [includeIf "gitdir:/path/to/group/"] path = /path/to/foo.inc # 路徑描述也可以用定義過的環境變數代替 $HOME/to/group [includeIf "gitdir:~/to/group/"] path = /path/to/foo.inc
-
onbranch
# 包括只有當我們是在一個工作樹,其中 foo-branch 目前已核實 [includeIf "onbranch:foo-branch"] path = foo.inc
note:
- 在2017年,git新發布的版本2.13.0包含了一個新的功能includeIf配置,可以把匹配的路徑使用對應的配置使用者名稱和郵箱;
"條件型別:匹配模式"
是includeIf
的條件;只有當條件成立時,才會包含path
選項指定的配置檔案;條件型別 和 匹配模式
用:
分隔;條件型別
共有以下幾種gitdir
、gitdir/i
、onbranch
;gitdir
、gitdir/i
: 路徑匹配模式,表示 如果 當前 git倉庫的.git 目錄
的位置 符合路徑匹配模式
, 就載入對應的配置檔案;(gitdir/i
表示匹配模式
忽略大小寫)- .git 目錄的位置可能是 git 自動找到的 或是 $GIT_DIR 環境變數的值;
onbranch
: 分支匹配模式, 表示 如果我們位於當前檢出的分支名稱 與 分支匹配模式 匹配的工作樹中,就載入對應的配置檔案;
匹配模式
採用標準的glob 萬用字元
再加上 表示任務路徑的萬用字元**
;path
用於指定配置檔案的路徑;- 可以通過寫
多個 path
來表示包含多個配置
檔案;
-
栗子
-
指定工程的使用者配置
# 配置demo專案 [includeIf "gitdir/i:~/workspace/private/demo/.git"] path = ~/.gitconfig_self
-
指定目錄的使用者配置
# 配置public目錄 [includeIf "gitdir/i:~/workspace/public/"] path = ~/.gitconfig_work # 配置private目錄 [includeIf "gitdir/i:~/workspace/private/"] path = ~/.gitconfig_self
-
指定分支的使用者配置
# 配置 test-branch分支 [includeIf "onbranch:test-branch"] path = ~/.gitconfig_self
Referense