コンテンツにスキップ

Git 設定をディレクトリ or リポジトリごとに自動で切り替える

はじめに

Git を使っていると、プロジェクトごとにユーザー名やメールアドレスを変えたい場面が出てきます。特に、仕事用と個人用でリポジトリを使い分けている場合、それぞれに適した設定を自動で適用できると便利です。

ここでは、Git の設定をディレクトリやリポジトリごとに自動で切り替える方法について解説します。

ディレクトリ or リポジトリごとに自動で切り替える

Git はinclude/includeIfを使って、設定ファイルを条件付きで読み込めます。これを使うと「特定ディレクトリ配下のリポジトリだけ別のユーザー設定にする」といった切り替えが自動化できます。

ポイントは次のとおりです。

  • include.pathは指定した設定ファイルをその場に挿入する
  • includeIf.<condition>.pathは条件が一致したときだけ挿入する
  • 相対パスは「include を書いた設定ファイルの場所」基準で解決される

1. ディレクトリ単位で切り替える(gitdir)

gitdir:は.gitディレクトリの場所に対してマッチします。~/work/のようにディレクトリを末尾/で指定すると、配下すべてが対象になります。

1
2
3
4
5
6
7
8
9
# ~/.gitconfig
[include]
    path = ~/.gitconfig_common

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

[includeIf "gitdir:~/personal/"]
    path = ~/.gitconfig_personal

~/.gitconfig_workなどにuser.name/user.emailを書いておけば、自動で切り替わります。

1
2
3
4
# ~/.gitconfig_work
[user]
    name = Your Name (Work)
    email = your.name@company.example

2. リモートURLで切り替える(hasconfig:remote.*.url)

リポジトリのremote.<name>.urlが条件に一致したときだけ読み込めます。会社用のホストやドメインで切り替えたい場合に便利です。

1
2
3
# ~/.gitconfig
[includeIf "hasconfig:remote.*.url:https://github.com/company/**"]
    path = ~/.gitconfig_work

3. ブランチで切り替える(onbranch)

チェックアウト中のブランチ名が条件に一致すると読み込みます。リリース作業用の設定を一時的に有効化したい場合に使えます。

[includeIf "onbranch:release/*"]
    path = ~/.gitconfig_release

使うときの注意点

  • includeIfの条件が複数マッチすると、複数の設定が読み込まれる
  • 競合した値は「後で読み込まれたもの」が優先される
  • 相対パスは条件ではなく「include が書かれたファイルの位置」が基準
  • hasconfig:remote.*.urlで読み込まれるファイルにはremote.*.urlを含められない(仕様上の制約)
  • 設定が反映されているかは、git config user.emailのようなコマンドで確認できる

まとめ

include/includeIfを使うと、リポジトリ単位で Git ユーザーを自動切り替えできます。仕事用と個人用の設定を分けたり、特定プロジェクトだけ別の設定にしたりする場合に活用しています。