🐺

git configを使った複数GitHubアカウントの管理

に公開

はじめに

複数のGitHubアカウントを使い分けている場合、ディレクトリごとに異なるアカウントでコミットしたいことがあります。
.gitconfigincludeIfディレクティブを使用することで、ディレクトリ別にGitの設定を切り替えることができます。

includeIfディレクティブの活用

基本的な設定

メインの.gitconfigファイルに以下のように記述します:

[user]
  name = mainuser
  email = main@example.com

[includeIf "gitdir:~/projects/sub/"]
  path = ~/.gitconfig_sub

別設定ファイルの作成

~/.gitconfig_subファイルを作成し、サブアカウント用の設定を記述:

[user]
  name = subuser
  email = sub@example.com

動作の仕組み

  • デフォルトではmainuserとして動作
  • ~/projects/sub/ディレクトリ以下のリポジトリでは自動的にsubuserの設定が適用される
  • gitdir:の条件にマッチするディレクトリでのみ、指定した設定ファイルが読み込まれる

gitdirの条件

  1. パターンが~/で始まる場合、~は環境変数HOMEの内容で置き換えられる。
  2. パターンが./で始まる場合、現在の設定ファイルを含むディレクトリに置き換えられます。
  3. パターンが~/、./、/のいずれかで始まらない場合、/が自動的に付加される。例えば、パターンfoo/barは/foo/barとなり、/any/path/to/foo/barにマッチする。
  4. パターンが/で終わる場合、**が自動的に追加される。例えば、パターンfoo/はfoo/**になる。つまり、"foo"とその中のすべてに再帰的にマッチする。

以下は1,4が適用される例です

[includeIf "gitdir:~/projects/sub/"]

https://git-scm.com/docs/git-config#Documentation/git-config.txt-gitdir

設定の確認方法

設定が正しく適用されているか確認する方法

# 現在の設定を確認
git config --list

# ユーザー名とメールアドレスを個別に確認
git config user.name
git config user.email

公式リファレンス

https://git-scm.com/docs/git-config#_conditional_includes

Discussion