仕事用と個人用などで複数GitHubアカウントを持ってる人は多いと思います。 で、仕事用リポジトリに個人用の(決して知られたくない)アカウントでコミットしてしまったー!という事故が発生することも多いと思います。 私もその一人です。

原因も解決策もよくわかってないのですが、今回PCを初期化したこともありしっかり設定することにしました!

ひとつのPCで複数GitHubアカウントを運用する

参考にさせていただいたのはこちらの記事!

複数のGitアカウントを手動切替不要で運用する - Qiita

手動で切り替える必要なしということで最高だなと思い設定させていただきました。(完全自動化は諦めたのですが(後述))

設定手順

1. 鍵を作る

お前らのSSH Keysの作り方は間違っている - Qiita を参考に仕事用と個人用で2つ作りました。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

余談:コメント欄にメアド入れるのが一般的って書いてあったのでその通りにしたけど、公開鍵の中に記載されるから微妙だな。。次から こうしよう。

ssh-keygen -t rsa -b 4096 -C "aoma" -f ~/.ssh/id_rsa_aoma

公開鍵をコピーして、それぞれのGitHubアカウントに登録します。

pbcopy < ~/.ssh/id_rsa.pub # クリップボードにコピーするコマンド

2. 使用する秘密鍵の設定

~/.ssh/configの設定をします。 あんまりよくわかってないんですが、Hostごとにどの秘密鍵を使うか。的な?

vi ~/.ssh/config

Host github_work
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes

Host github_aoma23
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_aoma
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes

3. cloneしたリポジトリに設定する

下記のようにcloneする親ディレクトリを用意します。

そして、cloneしたリポジトリ毎にgit configのコマンドを実行することにしました。

# 仕事用なら
git config --local user.name "hogehoge"
git config --local user.email "hogehoge@users.noreply.github.com"
git config --local url."github_work".insteadOf "git@github.com"

# 個人用なら
git config --local user.name "aoma23"
git config --local user.email "12345601+aoma23@users.noreply.github.com"
git config --local url."github_aoma23".insteadOf "git@github.com"

cloneした際は必ず実行しないといけませんが、そこは頑張ることにしました。

※参考にさせていただいた記事ではここを自動化(cloneしたら自動設定)してたのですが、私には難しすぎて諦めました。

プライベート(非公開)リポジトリがcloneできない!

やっと表題の件なのですが、個人用のPrivate(非公開)リポジトリがcloneできなくてはまりました。

仕事用は非公開リポジトリでもgit clone 〜でクローンできる。(先に秘密鍵作ったから?)

env GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_aoma -F /dev/null" git clone 〜 として秘密鍵指定しても下記のようなエラーに。

% env GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_aoma -F /dev/null" git clone git@github.com:aoma23/test.git 
Cloning into 'test'...
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

う〜む、、と悩んでたら同じような現象になっている人を発見!

GitHubでリモートからcloneできないときにやったこと - Qiita

どうやらSSH公開鍵をGitHubに登録するだけでなく、ssh-agentに秘密鍵を登録する必要あるそうです。

ほうほう。
ということで ssh-agentを利用して、安全にSSH認証を行う - Qiita を参考にssh-agentを登録してみることに。

まずはssh-add -l で現状登録されている鍵を確認!
なるほど、1個(仕事用)しか登録されていない。

ということで個人用の秘密鍵を登録!

ssh-add -K ~/.ssh/id_rsa_aoma

再度ssh-add -l で確認したところ無事2個になってました。

これでcloneいけるのでは!?

% env GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_aoma -F /dev/null" git clone git@github.com:aoma23/test.git 
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

キター!!

コミットも検証しましたがそれぞれのアカウントでしっかりコミットされてました!最高!

誰かの役に立てば幸いです。それではまた!

Updated: