始めに
GitHubを仕事とプライベートで分けている人にとって、1つのPCでアカウントを切り替えるのは大変だと思います。以下の記事でgit clone
をフックして自動で設定するやり方が載っていましたが、中々難しそうだなと感じました。また、ローカルで初めてgitリポジトリを作った場合は設定されなさそうなのも難点でした。
そこで明示的にどちらのアカウントを使っていくかを指定するコマンドを作ることにしました。
こちらの場合だとclone後にコマンドを1つ入力する手間がありますが、それでも比較的簡単に設定でき、ローカルでgit initした場合も対応できます。
注意
GitHubアカウントは1つ以上無料のアカウントは作ってはいけないことになっているので、この状況にいる人は少なくともどちらかは有料アカウントを持っている人になります。
User Accounts and Organizations have different administrative controls; a human must create your Account; you must be 13 or over; you must provide a valid email address; and you may not have more than one free Account.
設定方法
まずはそれぞれのGitHubアカウント用の公開鍵を設定します。github_p
とgithub_w
は適当な名前なので、別な名前でも大丈夫です。
Host github_p
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_private
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
Host github_w
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github_work
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
グローバルのユーザ情報は消しておきます。これで各gitリポジトリごとに設定しない限り使用できなくなります。
$ git config --global --unset user.name
$ git config --global --unset user.email
最後にローカルでuser.name, user.email, url..insteadOfを設定します。
# プライベートの場合
$ git config user.name "個人ユーザ名"
$ git config user.email "個人メールアドレス"
# .ssh/configで設定したHost値を使用します
$ git config url."github_p".insteadOf "git@github.com"
# 仕事の場合
$ git config user.name "仕事ユーザ名"
$ git config user.email "仕事メールアドレス"
# .ssh/configで設定したHost値を使用します
$ git config url."github_w".insteadOf "git@github.com"
このinsteadOf
の設定が肝で、github_p
など本来存在しないHost名をgit@github.com
に変更して送信してくれます。
アカウント切り替えのコマンド作成
以上が設定内容で、最後のローカル設定を各リポジトリごとに設定すれば良いですが、これを一々やるのは大変です。そこでgitのエイリアスを作って切り替えの手間を少しだけ減らします。unsetの設定は誤って個人と仕事で逆を設定してしまった場合に打ち消せるようにするためです。
[alias]
account-p = "!git config --unset url.\"github_w\".insteadOf; git config user.name \"個人ユーザ名\"; git config user.email \"個人メールアドレス\"; git config url.\"github_p\".insteadOf \"git@github.com\";"
account-w = "!git config --unset url.\"github_p\".insteadOf; git config user.name \"仕事ユーザ名\"; git config user.email \"仕事メールアドレス\"; git config url.\"github_w\".insteadOf \"git@github.com\";"
エイリアスが設定されれば後はコマンド一発で設定できます。
# 個人の場合
$ git account-p
# 仕事の場合
$ git account-w
なお、もし設定を忘れてコミットした場合、以下の警告が出されるので気づくことができます。(大体これが出て設定する羽目になってますが。。)
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email you@example.com
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
終わりに
以上が複数のGitHubアカウントを簡単に切り替えるコマンドの作成方法でした。これで比較的切り替えやすくなったとはいえ、それでも手間は出てきます。GitHubはそもそもマルチアカウントで使う想定ではないため、中々厳しいかもしれません。僕はGitHub PagesやGitHub Actionsを使いたいためマルチアカウントで運用していますが・・・。
なので、仕事とプライベートで分けたい場合はGitLabなどの別サービスを利用することも視野に入れると良いと思います。