Git v2.13.0(2017/05/10リリース)でgit configにConditional includes(条件付きインクルード)という機能が実装され、特定のリポジトリに対して一括でgit configを適用できるようになりました。
会社用と個人用でプロファイルを使い分けたり、たまに使う設定をまとめて適用する場合などに役立ちそうです。
設定方法
**includeIf
**セクションを使います。git configコマンドか、~/.gitconfigを直接編集して追記します。
$ git config --global includeIf."<条件>".path "<設定ファイル>"
.gitconfig
+ [includeIf "<条件>"]
+ path = <設定ファイル>
-
<条件>
部分にはgitdir:
シンタックスで対象ディレクトリを指定できる。-
gitdir:
では標準のglobに加え、**
で階層をまたいだマッチも可能。 -
gitdir:~/foo/bar/
のように/
で終わる場合は、~/foo/bar/**
と補完され子階層すべてにマッチする。
-
-
<設定ファイル>
に記述した内容が、該当ポジトリだけに適用される。
より詳しい仕様は公式ドキュメントで確認できます。
例: 親ディレクトリによってメールアドレスを変える
普段はmyname@example.com
を使っているが、いくつかのプロジェクトにはuser@work.com
というメールアドレスでコミットしたい場合を考えます。対象プロジェクトをwork
ディレクトリの下に置き、一括で設定を適用します。
ディレクトリ:
~/
├── a/
├── b/
└── work/
├── x/
└── y/
設定:
.gitconfig
[user]
email = myname@example.com
...
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
.gitconfig-work
[user]
email = user@work.com
確認:
# プロジェクトaではグローバル設定が反映される
$ cd ~/a
$ git config user.email
myname@example.com
# work配下のプロジェクトxでは設定が上書きされている
$ cd ~/work/x
$ git config user.email
user@work.com
このようにincludeIf
を使えば、特定の設定を上書きすることができます。
条件を追加して複数の設定ファイルを使い分けることもできます。