includeIfでgitconfigを読み分ける
フォルダ、ファイル構成
C:\Users\<USER NAME\.gitconfig # グローバルのgitconfig
C:\tmp\my_gitconfig # 読み分けるgitconfig
C:\src\my_repo # 対象のリポジトリ
C:\src\my_repo2 # 同上
C:\src\my_repo3 # 同上
グローバルのgitconfigファイルのパス指定
- 環境変数GIT_CONFIG_GLOBALで指定できる
- 例えば GIT_CONFIG_GLOBAL=C:\Git\gitconfig の場合、Cドライブ直下のGitの中のグローバルのgitconfigになる
Linuxのgitconfigのパス指定
- 環境変数XDG_CONFIG_HOMEが指定されている場合、それ以下のgitconfigが探索されて、存在しなければ$HOME/.gitconfig がグローバルのgitconfigになる
- 例えば XDG_CONFIG_HOME=~/.config の場合、 ~/.config/git/config のconfigファイルがグローバルのgitconfigになる
グローバルの.gitconfigのパス指定
[user]
name = Taro
email = taro@example.com
[includeIf "gitdir/i:C:/src/"]
path = "C:/tmp/my_gitconfig"
[includeIf "gitdir:$(prefix)/home/"]
path = "linux_gitconfig"
解説
- 上の設定で、C:/src以下にあるリポジトリではC:/tmp/my_gitconfigを読むようになる
1. gitdirの書き方
- gitdirはgitdir/iとして必ずケースインセンシティブにする
- gitdir/iの後にスペースを付けない
- C:/src/のように末尾に/スラッシュを付ける
- LinuxなどのUNIX系OSの場合は、/home/のように/から始めるパスの場合は$(prefix)を付けて$(prefix)/home/とする
2. リポジトリフォルダの中でgitコマンドを実行する
- リポジトリフォルダの中でgitコマンドを実行しないと上の設定は有効にならない
- すなわち、cd C:/src/my_repoした後にgit config --list --show-originなどで設定を確認する
3. pathの相対指定
- my_gitconfigのパスはグローバルのgitconfigファイルの相対パスとしても書ける
- 例えばグローバルのgitconfigがC:\Users\<USER NAME\.gitconfigの場合、path = "dir1/my_gitconfig"はC:\Users\<USER NAME\dir1\my_gitconfigに相当する
参考
https://git-scm.com/docs/git-config#FILES