GitHubで2つのアカウントのSSH鍵を使い分ける方法

GitHubで複数のアカウントを使い分けたい場合のやり方の解説です。
GitHubとしては、複数アカウントでの接続は推奨していませんが、組織として会社のアカウントを使うという方針の場合は仕方がありませんので何とかするしかありません。
方法としては2つあります

方法1 ログインユーザーを分ける

一つ目の方法は、OSでログインするユーザーを分けるやり方です。
gitの設定はOSのアカウントごとになるので、ログインユーザーを切り替えれ別のアカウントで作業が可能です。

ですが、ログアウト、ログインをやり直さないといけないというのがやや面倒です。

方法2 複数のカギを登録して切り替える

鍵の登録

.ssh/configにそれぞれのカギを以下のように登録します

Host github.com.hoge
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa_hoge

Host github.com.fuga
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_fuga

ここで、Host名が github.com.hoge になってますが、hogeの部分がユーザーの識別用です。
もちろん、鍵もそれぞれ別のものを登録できます。

clone

通常、cloneする場合
例えばfuga/fugafuga.gitをcloneする場合

git clone git@github.com:fuga/fugafuga.git

という感じにしますが、アカウントを指定する場合は

git clone git@github.com.アカウント名:fuga/fugafuga.git

とすることで、アカウントを指定してcloneすることができます。

アカウントは、configファイルで設定したHost名のgithub.com. よりも後ろの部分になります。

例えば、1つ目のアカウントで接続する場合は

git clone git@github.com.hoge:fuga/fugafuga.git

とすればよいでしょう。

リモートURLの張替え

すでにclone済みのリポジトリの場合は、接続先を張り替える必要がありますが、この場合も同じようにアカウント名付のリポジトリを設定すればOKです。

git remote set-url origin git@github.com.アカウント名:fuga/fugafuga.git
git pull

してみて、エラーがなければ成功です。

ローカルの情報をgit configで設定する

念のためコミットメッセージに残る表示名の設定を行っておきましょう。

cd レポジトリのフォルダ
git config --local user.name "なまえ"
git config --local user.email "hogehoge@example.com"
タイトルとURLをコピーしました