Gitのマルチアカウント環境をssh configのエイリアスとgitconfigのincludeIfで分離する構成を表したカバー画像

概要

複数アカウント環境は大きく2つのパターンに分かれます。

状況に合う方法を選べば設定ミスや認証トラブルを減らせます。

私は ~/.gitconfig includeIf 方式を推奨します。

利用シーン

  • 個人用 GitHub アカウントと会社の GitLab アカウントを同時に使う場合。
  • GitHub アカウントを複数持ち、リポジトリごとに別アカウントで push する必要がある場合。

~/.ssh/config のホストエイリアスで分岐する

同じリモートホストへ複数アカウントでアクセスするとき、SSH レベルで「どのホストにどのキーを使うか」を固定します。

Git のリモート URL にエイリアスを含めるので、リポジトリごとにどのアカウントかが明確になります。

デメリットは既存リモート URL をエイリアス形式へ手動で変換しなければならない点です。

[email protected]:user/repo.git のようなアドレスを
git@github-personal:user/repo.git のようなエイリアス URL に手作業で置き換えます。

構成例

 1# 個人 GitHub アカウント
 2Host github-personal
 3	HostName github.com
 4	User git
 5	IdentityFile ~/.ssh/id_ed25519_github_personal
 6	IdentitiesOnly yes
 7
 8# 会社 GitLab アカウント
 9Host gitlab-work
10	HostName gitlab.com
11	User git
12	IdentityFile ~/.ssh/id_ed25519_gitlab_work
13	IdentitiesOnly yes

リモート URL 例

  • GitHub: git@github-personal:USER/REPO.git
  • GitLab: git@gitlab-work:GROUP/REPO.git

動作確認

  • ssh -T git@github-personal
  • ssh -T git@gitlab-work

⚠️ よくあるミス

  • ssh -T [email protected] のようにデフォルトホストでテストすると意図しないキーが選ばれます。
  • 同一ホストで複数アカウントを使う場合、エイリアスは必須です。

~/.gitconfig の includeIf でフォルダー基準に分岐する

ディレクトリ単位で Git 設定(ユーザー名やメールなど)を自動的に分離する方法です。

SSH キーの切り分けとは独立して、コミット署名や著者情報を安全に分けたいときに便利です。

個人用と業務用のトップディレクトリを分けてルールを定義します。

構成例

1# ~/.gitconfig
2[includeIf "gitdir:~/work/"]
3	path = ~/.gitconfig-work
4
5[includeIf "gitdir:~/personal/"]
6	path = ~/.gitconfig-personal
1# ~/.gitconfig-work
2[user]
3	name = Your Name
4	email = your.name@company.com
1# ~/.gitconfig-personal
2[user]
3	name = Your Name
4	email = your.name@gmail.com

違い

項目~/.ssh/config のホストエイリアス~/.gitconfig includeIf(ディレクトリ基準)
目的リモート接続時にどの SSH キーを使うかを固定します。プロジェクトの場所に応じて user.emailuser.namesigningkey などの Git 設定を自動的に分けます。
適用範囲SSH 接続単位。エイリアスホストを指定したリモート URL のみ対象です。Git リポジトリ単位。パスが条件に一致すると自動で適用されます。
分岐基準リモート URL のホスト部分(例: github-personal、gitlab-work)。ローカルディレクトリパス(例: /work/、/personal/)。
変わる内容SSH が選ぶ IdentityFile、HostName、User など。コミット著者や署名設定など Git config の値。
長所同じホスト(例: github.com)で複数アカウントのキーを安全に分離できます。会社メールで個人リポジトリにコミットしてしまうミスを防ぎ、プロジェクトを移動してもルールが維持されます。
短所既存リモート URL をエイリアス URL へ手作業で変換する必要があります。まずフォルダー構造を決める必要があり、ルールを誤ると意図と異なる設定が適用されます。
推奨シーンGitHub アカウントが2つ以上、または GitHub と GitLab を同時に使う場合。業務と個人プロジェクトをフォルダーで分け、コミット著者の分離が重要な場合。

2つの設定は競合しません。

  • ~/.ssh/config は「どのキーで接続するか」を分離します。
  • ~/.gitconfig は「どのユーザーでコミットするか」を分離します。