Git 似乎支援三個等級的配置值:
- 每個系統的全域設定(儲存在
/etc/git-core
) - 每用戶全域設定(儲存在
~/.gitconfig
) - 每個儲存庫的本機設定(儲存在
$REPO/.git/config
)
這些選項涵蓋了大部分基礎,但我正在尋找一種處理第四級的方法。我有一個(非常)大的儲存庫集合,我需要使用與user.email
平常不同的值。這些儲存庫通常是透過自動化腳本建立和操作的,並且設定每個儲存庫的本機設定非常麻煩。
所有有問題的儲存庫都位於我的本機系統上的某個路徑前綴下。有沒有辦法在某個地方設定一個配置值,該值將被該路徑下的所有儲存庫繼承? (類似於.htaccess
設定一直繼承到檔案系統。)也許有一種方法可以在全域設定檔中設定條件值?在 UNIX 環境中還可以進行哪些其他安排來處理像我這樣的一組儲存庫?
答案1
我沒有找到在第四級配置 git 的方法。唯一的方法似乎是使用 覆蓋每個命令的配置值git -c key=value
。
我目前的 hacky 解決方案是定義一個 shell 函數作為 git 的包裝器。呼叫時,它將參數傳遞到系統 git 命令,但在檢查當前工作目錄並向命令添加額外參數(如果適用)之前。
function git () {
case "$PWD" in
/path/to/repos/*)
command git -c [email protected] "$@"
;;
*)
command git "$@"
;;
esac
}
答案2
根據git配置查看這個解決方案:
https://dzone.com/articles/how-to-use-gitconfigs-includeif
新增到“~/.gitconfig”檔案:
[includeIf "gitdir:~/work/project1/.git"]
path = .gitconfig-project1
建立“~/.gitconfig-project1”文件,內容如下:
[core]
sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"
[user]
name = user1
email = [email protected]
答案3
您可以使用環境變數來設定 git 的電子郵件地址GIT_AUTHOR_EMAIL
。如果你把它與進入目錄時執行 bash 腳本或者使用 zsh 進行目錄特定的 shell 配置您可以輕鬆更改每個目錄或父目錄的設置,例如,如果您進入目錄,~/work
您可以自動調整環境變數來更改您的電子郵件地址。
答案4
根據 Caleb 的回答,我們可以定義一個修改後的git
命令,該命令永久正確地配置此目錄中的所有儲存庫,以便以後所有使用 vanilla git 的都將使用新配置。我使用hub
,這是另一個 git 包裝器,所以我alias git=hub
用它替換了 my 並hub
在我的函數中調用 - 如果您不使用hub
,請將所有hub
呼叫替換為command git
:
function git() {
case "$PWD" in
/home/robin/git/3RD_PARTY)
hub "$@"
# We don't know which repository was cloned / operated on, so let's just reconfigure them all
for f in *; do
[[ -d "$f" ]] && hub -C "$f" config user.email $my_private_email
done
;;
/home/robin/git/3RD_PARTY/*)
hub "$@"
hub config user.email $my_private_email
;;
*)
hub "$@"
;;
esac
}
與 Caleb 的答案不同,答案僅在 shell 中運作(除非明確來源,否則僅在互動式 shell 中),這也會影響正確讀取 git 配置的其他 git 前端,例如 emacs magit。