会社用と個人用など、複数の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/config
とgit remote set-url
でリポジトリごとに設定。
これにより、アカウントの誤用を防ぎ、ストレスなく複数のプロジェクトを管理できるようになる。