GitHubアカウントを簡単に切り替える方法
仕事とプライベートで GitHub アカウントを使い分けている人は多いと思います。
自分も使い分けていていたのですが、プライベートのGitHubアカウントで接続したまま、Gitにpushしてしまい、プライベートのアカウントの写真が見られて恥ずかしい思いをしました。
なので、GitHubアカウントを簡単に切り替える方法を調査したので、その方法をここに記しておこうと思います。
コマンド一つで切り替える方法やファルダ別で自動で切り替え設定する方法も記しています。
*Macでの方法になります。
SSHキーを作成する
以下がGitHubのドキュメントです。
ターミナルを起動し、`.ssh`ディレクトリに移動します。
$ cd ~/.ssh
以下のテキストを貼り付け、例で使用されているメールを GitHub メール アドレスに置き換えます。
$ ssh-keygen -t ed25519 -C "your_email@example.com"
これにより、以下の内容が表示されます。
> Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM):
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
1つ目が、ファイル名です。id_privateなど好きなファイル名に変更できます。
デフォルトはid_ALGORITHMになると思います。
2つ目と3つ目は、パスワード設定です。パスワードが必要なければEnterで飛ばします。
詳しくはこちら
これにより、SSHキーが作成されます。lsコマンドで確認しておきましょう
$ ls
> id_rsa id_rsa.pub id_private id_private.pub
SSH キーを ssh-agent に追加する
バックグラウンドでssh-agentを開始します。
$ eval "$(ssh-agent -s)"
> Agent pid 59566
ssh-agentが起動できたら、Configファイルを開きます。
$ open ~/.ssh/config
ファイルがない場合は、ファイルを作成します。
$ touch ~/.ssh/config
~/.ssh/config
ファイルを開き、以下のように編集します。
よく使うアカウントは、Hostをgithub.comにしておくと良いと思います。
ファイルのパスは、先ほど作成したSSHキーのファイル名に変更してください。
# お仕事用
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa #お仕事用アカウントの鍵のファイル
# プライベート用
Host github.com.private
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_private #プライベートアカウントの鍵のファイル
SSH キーを ssh-agent に追加します。
SSH キーのファイル名は、先ほど作成したファイル名に変更してください。
$ ssh-add ~/.ssh/id_private
パスフレーズを使用した場合は、パスフレーズをキーチェーンに保存するために--apple-use-keychain
を追加して実行します。
$ ssh-add --apple-use-keychain ~/.ssh/id_private
GitHub で自分のアカウントに SSH 公開キーを追加しておきます。
詳しくはこちら
GitHubでの設定が完了したら、GitHubとの接続を検証します。
configファイルで設定したHostで接続を検証できます。
お仕事用
$ ssh -T github.com
プライベート用
$ ssh -T github.com.private
SSHの接続方法
通常は以下のようにクローンします。お仕事用はこれで問題ないです。
$ git clone git@github.com:<アカウント名>/<リポジトリ名>.gitgit
$ git remote add origin git@github.com:<アカウント名>/<リポジトリ名>.git
プライベート用は以下のようにgithub.com
をgithub.com.private
とHostでつけた値にする必要があります。
$ git clone git@github.com.private:<アカウント名>/<リポジトリ名>.gitgit
$ git remote add origin git@github.com.private:<アカウント名>/<リポジトリ名>.git
アカウントの切り替え
GitHubアカウント名とメールアドレスで切り替えできます。
ターミナル上で 以下のコマンドを使用し切り替えが可能です。
$ git config --global user.name `{GitHubのアカウント名}`
$ git config --global user.email `{GitHubのメールアドレス}`
アカウントをコマンド一つで切り替える
ただ、先ほどのコマンドを毎回使用するのは面倒なので、コマンド一つで切り替えるように shell コマンドでまとめておきます。
$ open ~/.zshrc
.zshrc
ファイルを開き以下の shell コマンドを作成します。
function gitwork() {
git config --global user.name `{GitHubのアカウント名}`
git config --global user.email `{GitHubのメールアドレス}`
}
function gitprivate() {
git config --global user.name `{GitHubのアカウント名}`
git config --global user.email `{GitHubのメールアドレス}`
}
この様にすると、gitworkやgitprivateを実行するだけで切り替えができます。
ファイルを実行しておきます。
$ source ~/.zshrc
ファルダ別で自動で切り替え設定する
ファルダ別にGitHubアカウントを自動的に切り替えることも可能です。
これで、privateファルダ内でのGitHubへの接続は、自動的にプライベート用に切り替えて操作ができます。
$ open ~/.gitconfig
~/.gitconfig
ファイルを開き、デフォルトの接続アカウントを設定します。ここでは仕事用をデフォルトにします。
[user]
name = GitHubのアカウント名
email = GitHubのメールアドレス
プライベート用のファイルを作成し開いて、同じようにアカウント情報を記載します
privateの部分は好きな名前で大丈夫です。
$ touch ~/.gitconfig_private
$ open ~/.gitconfig_private
[user]
name = GitHubのアカウント名
email = GitHubのメールアドレス
もう一度、~/.gitconfig
ファイルを開いて、先ほど作成したプライベート用のパスを読み込ませます。gitdir
の後は、フォルダのパスです。
[includeIf "gitdir:~/Desktop/private"]
path = ~/.gitconfig_private
これでDesktop/private
配下でのGitHubへのアクションは、自動的にプライベート用に切り替えて操作ができます。
どちらに接続しているか常に分かるようにしておく
どのGitHubアカウントに接続しているか常に分かるようターミナル上で表示をカスタマイズすることも可能です。こうすることで限りなくミスを減らせます。
gitwork $ git push origin # お仕事用アカウントに接続中
gitprivate $ git push origin # プライベート用に接続中
.zshrc
ファイルを開きます。
$ open ~/.zshrc
以下のように変更します。git config user.name
ではなくgit config user.email
でも大丈夫だと思います。
export PROMPT="
%F{green}[%~]%f `git config user.name`
=> %# "
RPROMPT='%*'
アカウントを切り替えたタイミングでファイルを実行するようにしておきます。
function gitwork() {
git config --global user.name `{GitHubのアカウント名}`
git config --global user.email `{GitHubのメールアドレス}`
source ~/.zshrc
}
function gitprivate() {
git config --global user.name `{GitHubのアカウント名}`
git config --global user.email `{GitHubのメールアドレス}`
source \~/.zshrc
}
.zshrc
を保存しファイルを実行しておきます。
$ source ~/.zshrc
これによりターミナルの表示をカスタマイズできていると思います。
VSCodeにも反映させる
VSCodeに反映させるには、以下のコマンドでシェルをZshに変更します。デフォルトはBashだと思います。
$ zsh