はじめに
会社用と個人開発用の GitHub アカウントの切り替えがめんどくさいなと感じたので、自動で切り替える設定をしました。
多分このように感じている方って多いかと思います。
この記事の設定をすることで、ディレクトリ毎に GitHub アカウントを自動で切り替えてくれるので、アカウントの切り替えを気にせずに開発ができます。
動作環境
- マシン: MacBook Pro (16-inch, 2019)
- OS: macOS Big Sur バージョン 11.5.2
- シェル: zsh 5.8
作業手順
秘密鍵と公開鍵を作成する
すでに GitHub のアカウントを持っていることを前提に進めます。
.ssh ディレクトリに移動します。
$ cd ~/.ssh
.ssh ディレクトリで 新しく秘密鍵と公開鍵を作成します。
このとき、既存の鍵のファイル名と異なるファイル名にしておかないと、
既存の鍵が上書きされてしまうので注意して下さい。
デフォルトだと、id_rsa
になっているはずなので、今回は id_sub_rsa
と設定します。
# 鍵の作成コマンド
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_sub_rsa #既存のファイル名とは異なる任意のファイル名を入力する
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
1つ目の質問が鍵のファイル名の設定となります。
鍵のファイル名を設定せずにエンターを押してしまうと、
既存の鍵の設定を上書きしてしまうので注意してください。変わってしまいます。
鍵ができているか確認してみます。
$ ls
id_rsa id_rsa.pub id_sub_rsa id_sub_rsa.pub config
先程設定したファイル名( id_sub_rsa
と id_sub_rsa.pub
)で公開鍵と秘密鍵ができていますね。
作成した公開鍵をGitHubに設定する
https://github.com/settings/ssh で公開鍵の設定をします。
画面右上部の「New SSH key」をクリックします。
「title」に公開鍵名、「key」に公開鍵の中身を入力します。
なので今回であれば、
「title」 はid_sub_rsa.pub
、「key」 はid_sub_rsa.pub の中身
となります。
入力が完了しますと、下記のように GitHub に公開鍵が設定されます。
configファイルにサブアカウントを設定する
GitHub に作成した公開鍵が設定できたので次は、
サブアカウントの情報を .ssh
ディレクトリの config
ファイルに、サブアカウントの情報を設定します。
config
ファイルがなければ下記のコマンドに作成します。
$ touch config
今回は、config
ファイル設定します。
# メインアカウント
Host GitHub
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
+ # サブアカウント
+ Host GitHub-sub # 任意のホスト名
+ HostName github.com
+ IdentityFile ~/.ssh/id_sub_rsa #サブアカウントの秘密鍵のファイル名
+ User git
+ Port 22
+ TCPKeepAlive yes
+ IdentitiesOnly yes
上記のようにサブアカウントを設定します。
Host
は、任意のホスト名を設定します。こちらは、GitHub との接続で使用します。
IdentityFile
は、秘密鍵の場所を設定します。
上記以外はコピーで大丈夫です。
これでサブアカウントの公開鍵の認証を行い GitHub と接続ができます。
GitHubと接続する
GitHub アカウントとの接続を確認します。
先程 ~/.ssh/config
に設定した Host
名を使用します。
下記のコマンドで接続を確認できます。
$ ssh -T [Host名]
アカウントの接続状況確認する際は下記のコマンドで確認ができます。
# メインアカウントの接続確認
$ ssh -T GitHub
Hi [メインアカウントのユーザー名] You re successfully authenticated, but GitHub does not provide shell access.
# サブアカウントの接続確認
$ ssh -T GitHub-sub
Hi [サブアカウントのユーザー名] You ve successfully authenticated, but GitHub does not provide shell access.
接続ができていることを確認できました。
自動でディレクトリごとにGitHubのアカウントを切り替える設定
さて本題の、ディレクトリ毎に GitHub アカウントを自動で切り替える設定をしたいと思います。
メインアカウント用とサブアカウント用の ~/.gitconfig
ファイルを作成し、設定します。
メインアカウントを ~/.gitconfig
ファイルに、
サブアカウントを ~/.gitconfig_sub
ファイルに設定します。
ファイルが無い方は作成してください。
それでは、~/.gitconfig
ファイルにメインアカウントの情報を追記します。
[user]
name = [メインアカウント名]
email = [メインアカウントのメールアドレス]
次に、~/.gitconfig_sub
ファイルにサブアカウントの情報を記載します。
[user]
name = [サブアカウント名]
email = [サブアカウントのメールアドレス]
GitHub のサブアカウントで使用したいディレクトリを ~/.gitconfig
ファイルに追記します。
[user]
name = [メインアカウント名]
email = [メインアカウントのメールアドレス]
+ [includeIf "gitdir:~/path/to/your-private/"]
+ path = ~/.gitconfig_sub
[includeIf "gitdir:~/path/to/your-private/"]
で、サブアカウントを使用したいディレクトリを設定します。
path = ~/.gitconfig_sub
で、サブアカウント用の ~/.gitconfig_sub
の情報を引用するように設定しています。
例えば、ホームディレクトリ配下のテスト
ディレクトリ(~/test/
)でサブアカウントを使って開発したい場合は、
[user]
name = [メインアカウント名]
email = [メインアカウントのメールアドレス]
[includeIf "gitdir:~/test/"]
path = ~/.gitconfig_sub
という設定なります。
こちらの設定をしていれば、test
ディレクトリ配下に新たなディレクトリを作成しても、サブアカウントを自動で設定してくれます。
リモートと接続する際の注意点
サブアカウントでリモートと接続する際に注意点があります。
~/.ssh/config
で設定した Host 名を用いて接続する必要があります。
通常リモートと接続する場合は、
$ git remote add origin git@github.com:<アカウント名>/<リポジトリ名>.git
と git@github.com
を使用しますが、
これですと、メインアカウントかサブアカウントかどちらを使用するのかわかないと混乱するようです。
なので Host 名を使用してリモートと接続する必要があります。
今回であれば、メインアカウントは GitHub
、サブアカウントは GitHub-sub
ですので
#メインアカウントのリモートと接続
$ git remote add origin git@GitHub:<アカウント名>/<リポジトリ名>.git
#メインアカウントのリモートと接続
$ git remote add origin git@GitHub-sub:<アカウント名>/<リポジトリ名>.git
とする必要があります。
さいごに
メインアカウントとサブアカウントの切り替えを自動でしてくれるので、無駄な手間が省けます。
アカウント切り替えを忘れることの防止にもなりますね。
一度設定してしまえば、あとは何もしなくていいので便利です。