なるべく楽してgithubで複数アカウントを使い分けたい

はじめに

最近複数アカウントを切り替える必要に迫られました。 ググってみるとssh configを弄ってホスト名を変えることで複数アカウントの使い分けを行っている人が多かったのですが、個人的にはめんどくさく感じました。 いろいろ試した結果をまとめておこうと思います。

鍵の用意

githubでは一つの鍵を複数アカウントに紐づけることができません (当たり前といえば当たり前なんですが)。

というわけで鍵を用意します。

ssh-keygen -f id_rsa_corp -t rsa -C hoge@example.com
mv id_rsa_corp* ~/.ssh/

秘密鍵を指定したgitコマンドの作成

まずは以下のようなshellスクリプトを適当な場所に用意します (以下は~/bin/.ssh-corpとして進めます)。

#! /bin/sh
exec ssh -oIdentityFile=~/.ssh/id_rsa_corp "$@"

上で作成したshellスクリプトを指定したgitコマンドのエイリアスを作成します。

alias git-corp="GIT_SSH=~/bin/.ssh-corp git"

これで個人用アカウントはgit、会社用はgit-corpと使い分けることで秘密鍵の切り替えができます。

コミットユーザの切り替え

上で作ったコマンドはgithubへの操作はちゃんとアカウントが切り替えできるのですが、このままだとコミットする時の情報は.gitconfigに書かれた情報のままです。

あまりスマートではありませんが、以下のようなエイリアスを作成し、cloneしてきたタイミングで実行すれば解決できます。

alias git-corp-config="git config user.name 'hoge fuga'; git config user.email 'hoge@example.com'"

ssh agentを使っている場合

以上でアカウントの切り替えはOKなのですが、ssh agentが起動している場合はうまくいきません。 応急処置的な対応ですが、環境変数を書き換えてssh agentを無効にしています。

unset SSH_AUTH_SOCK

おわりに

ちなみにですが、この記事を書き終わったあとにアカウントの切り替えが不要になったので、この労力は無駄になりましたとさ…