コンテンツにスキップ

レポジトリごとにGitユーザーを自動で切り替える

はじめに

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 ユーザーを自動切り替えできます。仕事用と個人用で設定を分けたい場合や、特定のプロジェクトだけ別の設定にしたい場合に活用しています。