ディレクトリごとにgitアカウントとSSHキーを自動で切り替える設定

会社用と個人用など、複数のGitHubアカウントを使い分けていると、意図しないアカウントでコミットやプッシュをしてしまうことがある。この問題は、リポジトリ(ディレクトリ)ごとにコミット作者と認証情報を自動で切り替えることで解決可能である。

本記事では、そのための2段階の設定手順を解説する。

手順1: コミット作者情報 (user.name/email) の切り替え

まず、git commit時の作者情報をリポジトリ単位で設定する。これにより、グローバル設定を上書きし、そのリポジトリ内でのみ有効な名前とメールアドレスを指定できる。

設定したいリポジトリのディレクトリ内で、以下のコマンドを実行する。

# 特定のリポジトリ内でのみ有効なユーザー名を設定
git config --local user.name "Your Account Name"

# 特定のリポジトリ内でのみ有効なメールアドレスを設定
git config --local user.email "your-account@example.com"
--localフラグが、設定をそのリポジトリの.git/configファイルに書き込むための鍵である。

手順2: 認証キー (SSHキー) の切り替え

次に、git push時に使用されるSSHキーをアカウントごとに切り替える。これは~/.ssh/configファイルを編集して実現する。

2-1. ~/.ssh/config の設定

~/.ssh/configファイルに、アカウントごとの接続設定を追記する。ファイルが存在しない場合は新規作成する。 ここでは、ホストのエイリアス(例: github-work, github-private)を定義し、それぞれに対応する秘密鍵ファイルを指定する。

# Default GitHub account (e.g., private)
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_private
  IdentitiesOnly yes

# Work account
Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

上記の例では、github-workというホスト名で接続した場合、~/.ssh/id_ed25519_workの鍵が使われるようになる。

2-2. リモートURLの書き換え

最後に、対象リポジトリのリモートURLを、先ほど.ssh/configで定義したホストエイリアスを使うように変更する。

# 現在のリモートURLを確認 (変更前)
# => origin  git@github.com:work-org/project.git (fetch)
git remote -v

# リモートURLを書き換える
git remote set-url origin git@github-work:work-org/project.git

# 変更後のリモートURLを確認
# => origin  git@github-work:work-org/project.git (fetch)
git remote -v

URLのホスト部分がgithub.comからエイリアスのgithub-workに変わっている点に注意が必要である。これにより、このリポジトリで通信する際は自動的にgithub-workで設定したSSHキーが使用される。

まとめ

以上の2つの設定により、リポジトリのディレクトリに移動するだけで、コミット作者と認証キーが自動的に適切なものに切り替わる環境が構築できた。

  • コミット作者: git config --localでリポジトリごとに設定。
  • 認証キー: ~/.ssh/configgit remote set-urlでリポジトリごとに設定。

これにより、アカウントの誤用を防ぎ、ストレスなく複数のプロジェクトを管理できるようになる。