Git
gitconfig

git configをプロジェクトによって使い分ける

More than 1 year has passed since last update.

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を使えば、特定の設定を上書きすることができます。
条件を追加して複数の設定ファイルを使い分けることもできます。

参考