からあげ日記

Webエンジニア的なこととか。

1台の端末で複数の github アカウントを使い分ける

概要

github で複数のアカウント(会社用とプライベート用など)を使い分けたい時用の設定です。

SSH の場合です。

(1台の端末で複数のアカウントを使い分ける場合は、 https 使ったほうが楽な気もします……)

前提

メインアカウント用の user.nameuser.email を登録

--global オプションで、メインのアカウント用の user.nameuser.email を登録します。

$ git config --global user.name "Main Account"
$ git config --global user.email main_email@email.com

設定方法

~/.ssh/config を変更

# メインのアカウント
Host github.com
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_main
  TCPKeepAlive yes
  IdentitiesOnly yes
# サブのアカウント
Host sub.github.com
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_sub
  TCPKeepAlive yes
  IdentitiesOnly yes

Host は config 内で一意の、わかりやすい名前をつけます。

IdentityFile は使い分けたいアカウントごとに生成した SSH キーの秘密鍵のパスを記載します。

SSH キー生成

.ssh/config に記載したパスに SSH キーを生成する。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):

ファイル名はなんでもいいのですが、今回の設定の場合だと ~/.ssh/id_rsa_main ~/.ssh/id_rsa_sub になります。

github に公開鍵登録

各アカウントの https://github.com/settings/keysNew SSH key で公開鍵を登録します。

Mac だと以下のコマンドでコピーができます。便利!

$ cat ~/.ssh/id_rsa_main.pub | pbcopy
$ cat ~/.ssh/id_rsa_sub.pub | pbcopy

使用したいアカウントに応じてリモートリポジトリのホストを変える

~/.ssh/config を編集した際に設定した Host を使用します。

今回の設定の場合だと、メインのアカウントを使用する場合は github.com のままで、サブのアカウントの場合は sub.github.com に変更します。

メインの場合

$ git remote -v
origin  git@github.com:SubAccount/SubProject.git (fetch)
origin  git@github.com:SubAccount/SubProject.git (push)

サブに変更

$ git remote set-url origin git@sub.github.com:SubAccount/SubProject.git

$ git remote -v
origin  git@sub.github.com:SubAccount/SubProject.git (fetch)
origin  git@sub.github.com:SubAccount/SubProject.git (push)

サブのアカウント用のリポジトリの user.name と user.email 変更

サブのアカウント用のリポジトリで、 user.nameuser.email を変更します。

# サブのアカウントを使いたいリポジトリ
$ cd ~/SubProject
$ git config --local user.name "Sub Account"
$ git config --local user.email sub_email@email.com

# 設定確認
$ git config user.name
Sub Account

$ git config user.email
sub_email@email.com

終わりです。

ちなみに、 git config -l を使うと、 git の設定内容が全て見られるので楽です。

終わりに

最後のリモートのホスト変更や user.nameuser.email の変更は下の方法を応用すれば自動化したりできそうな気もします(試していないです)。

klabgames.tech.blog.jp.klab.com

次こそは Angular 2.0 のチュートリアルの話です。多分。