gitの設置ファイルである.gitconfigでは、[includeIf]を指定することで特定の条件の時のみconfigの設定を有効にすることができます。
この記事では、[includeIf]を指定したにもかかわらず、設定が有効にならない時の確認ポイントを説明します。
サンプル
設定
- .gitconfig
[user]
user = work
email = work@example.com
[includeIf "gitdir:~/project/private/project1"]
path = ~/.gitconfig_private
- .gitconfig_private
[user]
user = private
email = private@example.com
期待する振る舞い
以下のように、~/project/privateの中にあるリポジトリで作業した時のみ、.gitconfig_privateの設定が有効になるようにしたい。
$ mkdir ~/project/private
$ cd ~/project/private
$ mkdir project1
$ mkdir project2
$ cd project1
$ git init
$ git config user.name
private
確認ポイント
うまくいかない時のチェックポイントを列挙します。
パスの確認
includeIfに書いた、"gitdir:~/project/private/"とpath = ~/.gitconfig_privateが合っているか確認します。
このパスは~/を使ったホームからの相対パスを認識しますが、念のために絶対パスにしてみて確認してみます。
gitdirの中のディレクトリが/で終わっているか
ディレクトリ指定が~/project/privateではなく~/project/private/と、スラッシュで完了していることを確認します。
git configを実行しているディレクトリはgit管理下か
[includeIf]が有効になっているのはgit管理下のディレクトリのみです。
例えば上記の期待する振る舞いの例だと~/project/private/project1はgit initしているので[includeIf]が有効になります。ですが、~/project/privateや~/project/private/project2のディレクトリでgit config user.nameを実行しても[includeIf]の内容は反映されないので注意が必要です。
ちなみに、特定のディレクトリ以下をすべて対象にしたいときは[includeIf "gitdir:~/project/private/**"]と、ワイルドカードを使うこともできます。