gitコマンドで複数のGitHubアカウントを使い分ける
環境
Mac OS
(Linuxでも動く気がします)
※ 2019/3/29追記
GitHubの利用規約にて1個人で複数の無料アカウントを運用する事は禁止されているようでした。
https://help.github.com/en/posts/github-terms-of-service#b-account-terms
もし複数の無料アカウントを利用している場合はアカウントの統合などを検討した方が良いです。
無料アカウントと有料アカウントを使い分ける場合などは本手順を参考にして貰えればと思います。
概要
GitHubではアカウントに秘密鍵が紐づいており
<code>git</code> コマンドを実行した際に指定した秘密鍵で利用アカウントを判定しています。
(秘密鍵未指定の場合はデフォルトの秘密鍵)
フリーランスをしていると自分のGitHubアカウントとは別で
取引先様のGitHubアカウントを作成する必要があったりするのですが
1台のPCで複数GitHubアカウントを使っていると秘密鍵の切り替えが面倒です。
私も最初はこちらの記事のように<code>.ssh/config</code>に別ホストとして設定していたのですが
これだとcloneする時などにいちいちホスト名を書き換えたりしなければいけなかったりして
それも少し面倒でした。(特にリポジトリが沢山あるプロジェクトだったので)
https://qiita.com/yamataku29/items/4744c9c70ad793c83b82
というわけで
リポジトリ所有者(ユーザーもしくはOrganizations)と秘密鍵の紐づけを設定しておけば
自動でgitコマンド実行時に秘密鍵を使い分けてくれるスクリプトを作りました。
こちらです
https://github.com/mildjester/gits
使い方
①cloneでもZIPダウンロードでも良いので上記リポジトリをダウンロードしてきます。
②<code>config_template</code>を同ディレクトリに<code>config</code>という名前でコピーします。
③コピーして生成した<code>config</code>の以下変数を設定します
■defaultKey
デフォルトの秘密鍵へのパス。基本的にテンプレートのままでいいはず。
■specialKeys
デフォルト以外の秘密鍵を使うリポジトリ所有者と秘密鍵の紐付け一覧。
形式は『リポジトリ所有者::秘密鍵のパス』なので
例えば「所有者AAA」のリポジトリに使う秘密鍵は<code>~/.ssh/id_rsa_1</code>、
「所有者BBB」のリポジトリに使う秘密鍵は<code>~/.ssh/id_rsa_2</code>とする場合は
以下のようになります。
specialKeys=(
'AAA::~/.ssh/id_rsa_1'
'BBB::~/.ssh/id_rsa_2'
)
④<code>~/.bashrc</code>に以下のエイリアスを追記しておきます。
通常使っているシェルがbash以外(zshやfishなど)の場合は、そちらの設定ファイルへ追記してください。
# gitコマンドを置き換える
alias git="/path-to-gits-repository/gits.sh"
※path-to-gits-repositoryはリポジトリをcloneまたはダウンロードしてきたディレクトリを指定してください
これで何も考えずにgitコマンドを打っても、裏で勝手に秘密鍵を切り替えてくれるようになります。
備考:ghqを使っている場合
私は<code>git clone</code>よりも<code>ghq get</code>をよく使うので、そのスクリプトも用意しました。
基本的な設定は上記と同じで、エイリアスの設定だけ追加します。
alias ghq_get="~/git/github.com/mildjester/gits/ghq_get.sh"
こちらは完全にコマンドを置き換える訳ではないのですが
以下のコマンドでリポジトリを取得する事ができるようになります。
(ghqとgetの間がスペースではなくアンダーバーになるだけ)
ghq_get git@github.com:AAAA/hogehoge.git
Discussion