gitを使用する際、複数のリポジトリを扱っていると、リポジトリごとに異なる設定を適用したいケースがある。 例えば、プライベートのリポジトリと会社のリポジトリで異なるユーザー名やメールアドレスを使い分けたい場合だ。
そのほかにも、例えば複数のリモートサーバで同じgitリポジトリを管理しているとき、リモートサーバによって設定を変えたい場合がある。
このような状況で非常に役立つのが、gitのincludeIfディレクティブである。
includeIfディレクティブとは
includeIfディレクティブは、特定の条件が満たされた場合にのみ、指定した設定ファイルを読み込む機能である。
これにより、リポジトリのパスやその他の条件に基づいて、異なる設定を自動的に適用することができる。
基本的な使い方
.gitconfig に以下のように記述するのが基本だ。
[includeIf "condition"]
path = .gitconfig_xxx
このようにすると、"condition"が成立する時のみ .gitconfig_xxx がロードされる。
"condition"にはいろんな条件が記述できる。
gitdir: リポジトリが存在している場所に応じて条件を変える。onbranch: リポジトリのブランチに応じて条件を変える。hasconfig:remote.*.url: リモートリポジトリのURLに応じて条件を変える。
例えば、 hasconfig:remote.*.url:git@example.com とすれば、 example.com からフェッチしたリポジトリの時に条件が成立する。
リモートリポジトリのURLに応じてサブモジュールの参照先を切り替える
.gitconfig
[includeIf "hasconfig:remote.*.url:git@example.com"] path = .gitconfig_example
git@example.com からのリモートリポジトリのアクセスの場合、 .gitconfig_example が呼ばれ、 git@github.com/subrepo が https://another_repo.com/subrepo に書き換えられる。
.gitconfig_example
[url "ssh://git@github.com/subrepo/"] insteadOf = https://another_repo.com/subrepo/