複数アカウントを使い分ける方法

「仕事」と「プライベート」で別々にGitHubアカウントを利用する方法を解説します。

「新規アカウントの鍵登録」「鍵を切り替えてgitコマンドを実行できるようにするための準備」「コミッタ情報(名前・アドレス)の切り替え」といった作業が必要になります。

新規アカウントの鍵登録

新規アカウント用の鍵を生成

まず、新規アカウント用の秘密鍵、公開鍵を生成します。

ここでは、 ~/.ssh 内に xxxディレクトリ を作成して、その配下に鍵を配置します。

$ mkdir ~/.ssh/xxx

ssh-keygenコマンド で鍵を生成します。-Cのコメント部分には、 GitHubに登録しているメールアドレス を指定します。

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/xxx/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

以下のように秘密鍵( id_rsa )、公開鍵( id_rsa.pub )が生成されました。

$ ls ~/.ssh/xxx/
id_rsa		id_rsa.pub

作成した公開鍵をGitHubに登録

git-multiple-account_register.png

右上メニューのSettings > SSH and GPG keys > New SSH key の順で選択すると鍵登録画面が表示されます。

Title には、どの鍵なのか判断するための文字列を入力します。

Key には、公開鍵を入力します。 cat ~/.ssh/xxx/id_rsa.pub | pbcopy とすると公開鍵の内容をコピーできるので、そのまま Key のフォームに貼り付けます。

Title Key を入力し終えたら、 Add SSH Key をクリックします。

接続確認

以下コマンドで接続確認できます。

$ ssh -i ~/.ssh/xxx/id_rsa -T git@github.com
Enter passphrase for key '/Users/xxxx/.ssh/xxx/id_rsa': 
Hi xxxx You've successfully authenticated, but GitHub does not provide shell access.

You've successfully authenticated と表示されればOKです。

アカウント使い分け

~/.ssh/configを編集

以下のように、 ~/.ssh/config に利用する複数のアカウント情報を記述します。

Host github.com-job
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes
Host github.com-private
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/xxx/id_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

Host には 任意の接続名 を記述します。

アカウントを使い分けてcloneを実行

git clone github.com-job:username/repo.git
と実行すると、 ~/.ssh/id_rsa のアカウント情報が利用されます。

git clone github.com-private:username/repo.git
と実行すると、 ~/.ssh/xxx/id_rsa のアカウント情報が利用されます。

コミッタ情報(名前・アドレス)切り替え

以下の2つの方法で、コミッタ情報(ユーザー名とメールアドレス)も変更することができます。

方法1 「.git/config」で設定

リポジトリごとに以下コマンドで利用するユーザー名、メールアドレスを設定します。

git config --local user.name "your_name"
git config --local user.email "your_email"

リポジトリ内の .git/config に書き加えられ、設定したユーザー名、メールアドレスが使用されます。

方法2 direnvを利用

https://github.com/direnv/direnv を利用すると、特定のディレクトリ配下にだけ環境変数を設定することができます。

コミッタ情報は、環境変数でも設定できるので、direnvを活用すればディレクトリごとにコミッタ情報を変更できます。

利用イメージは以下のようになります。

├── repositories_xxx
│   ├── repository_A (コミッタ情報1)
│   └── repository_B (コミッタ情報1)
└── repositories_yyy
    ├── repository_C (コミッタ情報2)
    └── repository_D (コミッタ情報2)

インストール

MacでHomebrewを利用している場合、以下コマンドでインストールできます。

$ brew install direnv

~/.bashrc編集

~/.bashrc に以下のように記述します。

eval "$(direnv hook bash)"

設定反映させるために以下コマンドを実行します。

$ source ~/.bashrc

他のシェルを利用している場合、https://github.com/direnv/direnv#bash を参考にしてください。

特定ディレクトリ配下で有効となる環境変数を設定

環境変数を設定したいディレクトリに移動します。
.envrc を作成します。

$ vi .envrc

.envrc には、以下、4つの環境変数を設定します。

export GIT_COMMITTER_NAME="your_name"
export GIT_COMMITTER_EMAIL="your_email"
export GIT_AUTHOR_NAME="your_name"
export GIT_AUTHOR_EMAIL="your_email"

編集完了後、下記コマンドを実行します。

$ direnv allow

以下のように、環境変数が設定され、ディレクトリごとにコミッタ情報を変更できるようになりました。

$ env | grep GIT
GIT_AUTHOR_NAME=your_name
GIT_COMMITTER_NAME=your_name
GIT_COMMITTER_EMAIL=your_email
GIT_AUTHOR_EMAIL=your_email
わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。