gitconfigのincludeIfを初めて使った。
ディレクトリによって異なるgitignoreを適用するために、この機能を活用した。

きっかけ

会社用と個人用のgitignoreを分けたかった。
具体的には、.privateディレクトリをgitの対象に含めるかどうかを環境によって変えたかった。
会社用のリポジトリでは.privateディレクトリをgitignoreに含めたいが、個人用のリポジトリでは含めたくないという要件があった。

実装

includeIfを使って、ディレクトリによって読み込むgitignoreを差し替える設定を行った。

まず、仕事用のignoreファイル ~/.gitignore_work を作成した。

...
.private/
...

次に、仕事用のconfigファイル ~/.gitconfig_work を作成し、このignoreファイルを指定した。

[core]
  excludesfile = "~/.gitignore_work"

個人用のignoreファイル ~/.gitignore_private も作成した。
こちらでは.privateディレクトリをignore対象から除外している。

...
# .private/ <- ignore対象から除外
...

個人用のconfigファイル ~/.gitconfig_private も同様に作成した。

[core]
  excludesfile = "~/.gitignore_private"

最後に、メインの ~/.gitconfigincludeIfの設定を追加した。
これにより、~/workディレクトリ配下では仕事用の設定が、~/privateディレクトリ配下では個人用の設定が自動的に読み込まれるようになった。

[includeIf "gitdir:~/work"]
  path = ~/.gitconfig_work
[includeIf "gitdir:~/private"]
  path = ~/.gitconfig_private

これで、ディレクトリによって異なるgitignoreを適用できるようになった。
includeIfは条件に応じて設定ファイルを読み込むことができる便利な機能である。

参考