同様のまとめ記事は数あれど、ドンピシャなケースの手順を丁寧にまとめた記事は無さそうでしたのでまとめることにしました。
対象者
- 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アカウントのディレクトリを作成する
以下の手順でプライベート用のディレクトリを作成していきます。
- プライベート用の設定ファイル.gitconfig_privateを作成
- .gitconfig_privateにアカウント情報登録
- .gitconfigにディレクトリの切り替え条件を記述する
- プライベート用のディレクトリを作成する
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アカウントのディレクトリを作成する
以下の手順で会社用のディレクトリを作成していきます。
- 会社用の設定ファイル.gitconfig_corporateを作成
- .gitconfig_corporateにアカウント情報登録
- .gitconfigにディレクトリの切り替え条件を記述する
- 会社用のディレクトリを作成する
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アカウントにアクセスできるってセキュリティがばがば過ぎない?と思われた方もいるかもしれませんがそれはそっとしておいてください。
以上、お読みいただきありがとうございました。
コメント