【GitHub】複数アカウントの切り替え(Windows & Mac)

同様のまとめ記事は数あれど、ドンピシャなケースの手順を丁寧にまとめた記事は無さそうでしたのでまとめることにしました。

対象者
  • PC: 会社用がWindows、プライベート用がMac(どっちがどっちでもOK)
  • GitHubアカウント: 会社用、プライベート用それぞれで存在
  • ローカルのディレクトリでGitHubアカウントを切り替えたい

コマンド操作はWindowsはGitBash、Macはターミナル(zsh)で行います。

前提として、メインアカウントが登録済の状態としています。

この記事で紹介する切り替え方法の良いところは、ローカルのディレクトリの切り替えでGitHubアカウントも切り替えられるというところです。

他の実現方法として、git clone するときにローカルのアカウントを切り替える方法がありますが、この切り替えの手間を省くことができるかつ、間違え難くなります。

それでは行きましょう!!

Windows

まずは会社用のWindowsを設定します。

SSH keyの作成

公開鍵と秘密鍵を作成します。

既に登録済のメインの鍵はデフォルトで「id_rsa」という名前で登録されているので、private用であることが分かるように「id_rsa_private」という名前で登録します。

$ cd ~/.ssh

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/[user_name]/.ssh/id_rsa): id_rsa_private
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_private
Your public key has been saved in id_rsa_private .pub
The key fingerprint is:
SHA256:9NRE2ms2ZIQJ2JgHgCHVl8+YREg2CVEoyAqY3Q9fpMI xxx@MyComputer
The key's randomart image is:
+---[RSA 3072]----+
|=+=@*=oOo. ++    |
|*o+o*.B.+ o*     |
 〜 省略 〜
|                 |
|                 |
+----[SHA256]-----+

id_rsa_private.pubファイルが生成されるのでそのファイルを開き、中身をすべてコピーします。

これを、GitHubのSSH keyに登録します。

GitHubにSSH keyの登録

GitHubを開きます。

Settings > SSH and GPGH keys > New SSH keys

Titleは、会社用Windows PCであることが分かるように、「Corporate_Windows」としましょう!

Keyには先程コピーしたものを貼り付けます。

ここからが本題です。

configファイルを作成し、2つのGitHubアカウントを登録します。

$ touch ~/.ssh/config

この作成したconfigファイルを開きます。

$ vi ~/.ssh/config

「i」キーでinsertモードにし、以下を記述します。

Host github
        HostName github.com
        IdentityFile ~/.ssh/id_rsa
        User git

Host github-private
        HostName github.com
        IdentityFile ~/.ssh/id_rsa_private
        User git

「esc」キー→「:wq」で保存します。

このconfigファイルが機能しているか確認します。

$ ssh -T github
Hi (会社のGitHubアカウント名)! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T github-private
Hi (プライベートのGitHubアカウント名)! You've successfully authenticated, but GitHub does not provide shell access.

このように表示されていればSSH key接続が完了しています!

プライベート用GitHubアカウントのディレクトリを作成する

以下の手順でプライベート用のディレクトリを作成していきます。

  1. プライベート用の設定ファイル.gitconfig_privateを作成
  2. .gitconfig_privateにアカウント情報登録
  3. .gitconfigにディレクトリの切り替え条件を記述する
  4. プライベート用のディレクトリを作成する

1. プライベート用の設定ファイル.gitconfig_privateを作成

$ touch ~/.gitconfig_private

2. .gitconfig_privateにアカウント情報登録

$ vi ~/.gitconfig_private

「i」キーでinsertモードにし、以下を記述する。ユーザー名、メールアドレスとも””は不要です。

[user]
	name = プライベートのGitHubアカウントのユーザー名
	email = プライベートのGitHubアカウントのメールアドレス

「esc」→「:wq」で保存します。

3. .gitconfigにディレクトリの切り替え条件を記述する

$ vi ~/.gitconfig

開いたファイルの最後に以下を追記する。

[includeIf "gitdir:~/workspace_private/"]
	path = ~/.gitconfig_private

ディレクトリはworkspace_privateという名前とし、このディレクトリは次で作成します。

4. プライベート用のディレクトリを作成する

$ mkdir ~/workspace_private

これで、プライベート用GitHubアカウントにつながっているディレクトリを作成することができました。

接続GitHubアカウントの確認

workspace_privateディレクトリがプライベート用のGitHubアカウントと接続されているかユーザー名とメールアドレスから確認します。

$ cd ~/workspace_private
$ git init
$ git config user.name
$ git config user.email

これでプライベート用のGitHubアカウント情報が表示されれば成功です。

リモートリポジトリ追加時の注意点

これ重要です!

プライベート用に作成したGitHubアカウントをgit remote addする際は通常と異なります。

通常
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git

プライベート用
$ git remote add origin github-private:ユーザ名/リポジトリ名.git

上記のように、「git@github.com」のところを、configで設定したHost名「github-private」とします。

ブランチをcloneする場合

上記の方法でremote add originをしてから、以下のようにcloneします。

ここでも通常のGitHubのCodeでコピーできるそのまま使用はできません。

通常
$ git clone git@github.com:ユーザ名/リポジトリ名.git

プライベート用
$ git clone github-private:ユーザ名/リポジトリ名.git

一旦完了です!お疲れ様でした!

Mac

それではプライベートのMacを設定していきます。

正直、Windowsと一緒です!

SSH keyの作成

% cd ~/.ssh
% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/[user_name]/.ssh/id_rsa): id_rsa_corporate
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa_corporate
Your public key has been saved in id_rsa_corporate.pub
The key fingerprint is:
SHA256:OKbGVGVM58hJovWXKhNXe/dwoSLxvsY6NvRYxy02pYM xxx.AirPort
The key's randomart image is:
+---[RSA 3072]----+
|      oo=.o    . |
|     o B.*oo  . .|
 〜 省略 〜
|   .     =o.     |
|        ..o      |
+----[SHA256]-----+

ファイルが作成されたか見てみましょう。

% ls
id_rsa  id_rsa.pub  id_rsa_corporate  id_rsa_corporate.pub

.sshディレクトリ内を確認すると、メインで使用されている「id_rsa」と、今回作成した「id_rsa_corporate」があることがわかります。

% vi id_rsa_corporate.pub

id_rsa_corporate.pubファイルを開き、全てをコピーし、:qで閉じます。

GitHubにSSH keyの登録

Windowsでやったときと同じように、今度は、会社用アカウントでGitHubを開き、SSH key接続をします。

ここでのTitleは「Private_Mac」としておきます!

Windowsのときと同じようにconfigファイルを設定します。

configファイルを作成し、2つのGitHubアカウントを登録します。

% touch ~/.ssh/config

この作成したconfigファイルを開きます。

% vi ~/.ssh/config

「i」キーでinsertモードにし、以下を記述します。

Host github 
  HostName github.com
  IdentityFile ~/.ssh/id_rsa 
  User git

Host github-corporate
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_corporate
  User git

「esc」キー→「:wq」で保存します。

このconfigファイルがちゃんと機能しているか確認します。

% ssh -T github
Hi (プライベートのGitHubアカウント名)! You've successfully authenticated, but GitHub does not provide shell access.

% ssh -T github-corporate
Hi (会社用のGitHubアカウント名)! You've successfully authenticated, but GitHub does not provide shell access.

このように表示されていればSSH key接続が完了しています!

会社用GitHubアカウントのディレクトリを作成する

以下の手順で会社用のディレクトリを作成していきます。

  1. 会社用の設定ファイル.gitconfig_corporateを作成
  2. .gitconfig_corporateにアカウント情報登録
  3. .gitconfigにディレクトリの切り替え条件を記述する
  4. 会社用のディレクトリを作成する

1. 会社用の設定ファイル.gitconfig_corporateを作成

% touch ~/.gitconfig_corporate

2. .gitconfig_corporateにアカウント情報登録

% vi ~/.gitconfig_corporate

「i」キーでinsertモードにし、以下を記述する。ユーザー名、メールアドレスとも””は不要です。

[user]
	name = 会社のGitHubアカウントのユーザー名
	email = 会社のGitHubアカウントのメールアドレス

「esc」→「:wq」で保存します。

3. .gitconfigにディレクトリの切り替え条件を記述する

% vi ~/.gitconfig

開いたファイルの最後に以下を追記する。

[includeIf "gitdir:~/workspace_corporate/"]
	path = ~/.gitconfig_corporate

ディレクトリはworkspace_corporateという名前とし、このディレクトリは次で作成します。

4. 会社用のディレクトリを作成する

% mkdir ~/workspace_corporate

これで、会社用GitHubアカウントにつながっているディレクトリを作成することができました。

接続GitHubアカウントの確認

workspace_corporateディレクトリが会社用のGitHubアカウントと接続されているかユーザー名とメールアドレスから確認します。

% cd ~/workspace_corporate
% git init
% git config user.name
% git config user.email

これで会社用のGitHubアカウント情報が表示されれば成功です。

リモートリポジトリ追加時の注意点

これ重要です!

会社用に作成したGitHubアカウントをgit remote addする際は通常とコマンドが異なります。

通常
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git

会社用
$ git remote add origin github-corporate:ユーザ名/リポジトリ名.git

上記のように、「git@github.com」のところを、configで設定したHost名「github-corporate」とします。

ブランチをcloneする場合

上記の方法でremote add originをしてから、以下のようにcloneします。

ここでも通常のGitHubのCodeでコピーできるそのまま使用はできません。

通常
% git clone git@github.com:ユーザ名/リポジトリ名.git

会社用
% git clone github-corporate:ユーザ名/リポジトリ名.git

まとめ

WindowsとMacで設定が少しは異なるかと思いまとめましたが、Linuxなので結局設定は全く同じでした。。

また、プライベート用PCで会社用のGitHubアカウントにアクセスできるってセキュリティがばがば過ぎない?と思われた方もいるかもしれませんがそれはそっとしておいてください。

以上、お読みいただきありがとうございました。

コメント