🔀

複数のGitHubアカウントを自動で切り替える方法

に公開

前提

複数のGitHubのアカウント(個人用、会社用など)を運用したいとき、以下の2つを考慮する必要があります。

  • git configuser.nameuser.email: これはコミットの署名者情報です。
  • GitHubと通信を実施するためのSSHキー:リポジトリのアクセス権限でありSSH接続をするために必要です。

複数アカウントで楽に切り替えて、SSH認証情報はあっているけど、user.nameuser.emailが別アカウントのものだった!を回避するために記載します。

実際SSH認証情報が合っていればコミット等の操作は出来てしまいます。

  • ディレクトリごとに自動でgit configを切り替えるように設定する
  • コマンドを1回入力して、SSH認証情報の切り替えを実施する

を順番に解説します。

ディレクトリごとに自動でgit configを切り替える

個人、会社のプロジェクトがあるディレクトリがある状態を作ります。

  • ~/company(会社)
  • ~/personal(個人)

1. ~/.gitconfig(グローバルな設定ファイル) を編集

~/.gitconfigincludeIf を設定することで、特定のディレクトリ以下でのみ別の設定ファイルを読み込むようにできます。

[includeIf "gitdir:~/company/"]
    path = ~/.gitconfig_company

[includeIf "gitdir:~/personal/"]
    path = ~/.gitconfig_personal

2. ~/.gitconfig_personal を作成

[user]
    name = 個人のGitHubのユーザー名
    email = 個人のGitHubのメールアドレス

3. ~/.gitconfig_company を作成

[user]
    name = 会社のGitHubのユーザー名
    email = 会社のGitHubのメールアドレス

コマンドを1回入力して、SSH認証情報の切り替えを実施する

複数のSSHキーを切り替えます。

  1. ~/.ssh/config の設定を確認
# 会社用
Host company
  HostName github.com
  IdentityFile ~/.ssh/company
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

# 個人用
Host personal
  HostName github.com
  IdentityFile ~/.ssh/personal
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes
  1. ssh-agentを自動切り替えをするようにaliasを作成してコマンドで切り替える

ssh-agent:SSHの秘密鍵を一時的にメモリに保持してくれるプログラム

Macであれば、.zshrcに以下を追加します。

alias company = 'ssh-add -D && ssh-add ~/.ssh/company && echo "Switched to company"'
alias personal = 'ssh-add -D && ssh-add ~/.ssh/personal && echo "Switched to personal"'

設定後シェルの再起動を実施

source ~/.zshrc

実施に動かす

こちらでターミナルを使用する際に、
companyと入力すれば、SSH認証情報が会社用に
personalと入力すれば、SSH認証情報が個人用に
なります。

SSH認証情報の切り替え忘れが発生しても、リポジトリとはそもそも通信が出来ないので問題ないです。

たとえば、personalと入力すると

All identities removed.
Identity added: /Users/sho/.ssh/personal (個人のGitHubのメールアドレス)
Switched to personal

このようなログが表示されて、切り替えることが一瞬で出来ます。

GitHubで編集を提案

Discussion