includeIfでgitconfigを読み分ける

現在どのgitconfigを読み込んでいるか確認

 git config --list --show-origin --show-scope

フォルダ、ファイル構成

 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"
 [includeIf "gitdir:/mnt/c/src/**/*"]       # WSLでc:\src以下を対象にする場合
    path = "gitconfig/wsl.gitconfig"        # グローバルの.gitconfigが.config/git/configなら、
                                            # ここでのpathは.config/git/gitconfig/wsl.gitconfig

解説

  • 上の設定で、C:/src以下にあるリポジトリではC:/tmp/my_gitconfigを読むようになる

1. gitdirの書き方

  • gitdirgitdir/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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2023-05-16 (火) 16:08:13