はじめに
こんなことを考えたことはありませんか?
Gitのアカウントを仕事とプライベートで分けたいんだけど。。。
そうそうこれこれ!
エンジニアあるあるですよね!
ということで、今回はそんな悩みを吹き飛ばすために、複数のGitアカウントを1台のPCで扱えるように設定していきましょう。
Gitのホスティングサービスのアカウント作成
まずは今回使い分けるGitのホスティングサービスのアカウントを作成しましょう。
すでにアカウントを持っている方は特に作成する必要はありません。
今回は例として仕事用のGitHubアカウントとプライベート用のGitHubアカウントを作成しました。
秘密鍵と公開鍵の作成
まずは~/.ssh
ディレクトリにSSHで公開鍵認証を使うための秘密鍵と公開鍵を作成します。
それでは~/.ssh
ディレクトリに移動していきます。
$ cd ~/.ssh
次に、秘密鍵と公開鍵を作っていきます。
今回は複数のアカウントを運用する形になるので、秘密鍵と公開鍵を必要アカウント分を作成してください。
なお、tオプション
で公開鍵の暗号形式を選択する事ができます。
ちなみにGitHubではed25519が推奨されているそうなので、例ではed25519を使用しています。
ただ、BacklogのGitにSSHで接続しようとed25519形式で公開鍵を作成したところ、正常に認識されませんでした。
そのような場合は-t rsa
と記述することでRSA方式を指定して公開鍵を作成し、試してみてください。
また、fオプション
で鍵の名前の指定は必ず行っておきましょう。
というのも、すでに存在する名前で鍵を作成した場合、すでに存在する同じ名前の鍵ファイルの内容を上書きしてしまうからです。
それでは、下記コマンドを実行してください。
$ ssh-keygen -t ed25519 -C "account1@example.com" -f id_ed25519_github_account1
$ ssh-keygen -t ed25519 -C "account2@example.com" -f id_ed25519_github_account2
それぞれのコマンドを実行すると、下記のように対話形式で2つの質問を聞かれますが、2回とも何も入力せずにEnterを押してしまいましょう。
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
すると~/.ssh
ディレクトリに下記4つのファイルが作成されています。
- id_ed25519_github_account1
- id_ed25519_github_account1.pub
- id_ed25519_github_account2
- id_ed25519_github_account2.pub
id_ed25519_github_account1
とid_ed25519_github_account2
が秘密鍵で、id_ed25519_github_account1.pub
とid_ed25519_github_account2.pub
が公開鍵となります。
公開鍵をGitのホスティングサービスに登録
次は、2つの公開鍵の内容をコピーして、GitHubなどのホスティングサービスにそれぞれ登録していきます。
まずは1つ目のアカウントでGitのホスティングサービスにログインをしてください。
次に、コピーした公開鍵をGitのホスティングサービスに登録していきます。
まずは作成した公開鍵をコピーしていきます。
下記のコマンドを実行すると、公開鍵のファイルの内容を表示することができます。
それぞれコピーできるようにしておきましょう。
$ cat ~/.ssh && cat id_ed25519_github_account1.pub
$ cat ~/.ssh && cat id_ed25519_github_account2.pub
GitHubの場合、公開鍵は下記から登録することができます。
Backlogの場合は下記を参考にしてください。
それでは、GitHubを開いたら下記画像の通り「New SSH key」をクリックしてください。
すると、下記のようSSHの公開鍵の設定画面になるので、Title部分に今回設定する公開鍵がわかるような名前を付けて、Keyの部分に先程コピーした公開鍵の内容を貼り付けてください。
TitleとKeyの入力が終わったら「Add SSH key」をクリックして登録を完了させましょう。
これで無事に1つ目のアカウントに公開鍵の設定をすることができました。
続いて2つ目のアカウントも先ほどと同じように、ログインして公開鍵を登録しておいてください。
configファイルにアカウントの情報を追加
次に、SSH接続の設定をするために、config
ファイルを作成していきます。
~/.ssh
ディレクトリにconfig
ファイルがない場合は、下記コマンドを実行してファイルを作成してください。
$ touch ~/.ssh/config
作成したconfigファイルにSSHで接続する際の情報を記述してください。
注意点として、Userは必ずgit
にしてください。
Host github.com.account1 #任意のホスト名
HostName github.com
IdentityFile ~/.ssh/id_ed25519_github_account1 # アカウント1の秘密鍵ファイル
User git
IdentitiesOnly yes
Host github.com.account2 #任意のホスト名
HostName github.com
IdentityFile ~/.ssh/id_ed25519_github_account2 # アカウント2の秘密鍵ファイル
User git
IdentitiesOnly yes
config
ファイルを保存したら、実際にSSH接続ができているか確認していきましょう。
確認するためには下記のコマンドを実行してください。
$ ssh -T github.com.account1
$ ssh -T github.com.account2
下記のようにそれぞれのコマンドで設定したGitHubのアカウント名が出力されればOKです。
Hi (GitHubのアカウント名)! You've successfully authenticated, but GitHub does not provide she
ll access.
もしもPermission denied (publickey)
などとなってしまった場合はconfig
ファイルの秘密鍵のパスが合っているかなどを確認してください。
ディレクトリごとにGitHubアカウントを自動で切り替える設定
最後にディレクトリごとにGitHubアカウントを自動で切り替える設定をしていきましょう。
メインで使用したいGitのアカウントを下記のコマンドで登録
すでに登録している方はやらなくてOKです。
$ git config --global user.name "account1"
$ git config --global user.email account1@example.com
サブで使用したいアカウント用に.gitconfigファイルを作成
下記のコマンドを実行してファイルを作成してください。
なお、ファイル名は好きに付けてしまって大丈夫です。
$ touch ~/.gitconfig_account2
これでホームディレクトリに.gitconfig_account2
ファイルが作成されました。
次に、作成した.gitconfig_account2
ファイルにサブで使用したいアカウントのユーザー名とメールアドレスを下記の通り記述してください。
[user]
name = account2
email = account2@example.com
.gitconfigファイルの編集
次に、~/.gitconfig
ファイルの最後に下記を追加してください。
[includeIf "gitdir/i:~/Desktop/Private/"]
path = ~/.gitconfig_account2
このコードを追加することで、~/Desktop/Private
の中で作成されたディレクトリがGit管理になった場合、自動的にaccount2に切り替わるようになります。
アカウントが自動的に切り替わっているかの確認
設定が全て終了したので、無事にアカウントが自動的に切り替わっているかの確認をしましょう。
メインアカウントの確認
下記のコマンドを実行して、メインで使用するアカウントのユーザー名とメールアドレスが出力されていればOKです。
$ git config user.name
$ git config user.email
サブアカウントの確認
まずは~/Desktop
に下記のコマンドを実行してPrivate
ディレクトリを作成してください。
$ mkdir ~/Desktop/Private
次にGitの初期化をして、ユーザー名とメールアドレスを確認してみましょう。
無事にサブアカウントのユーザー名とメールアドレスが出力されれば成功です。
$ git init
$ git config user.name
$ git config user.email
ちなみに、~/Desktop/Private
配下に作成したディレクトリやgit cloneしてきたディレクトリなどでも自動的にサブアカウントのユーザー名とメールアドレスが出力されるはずです。
できなかった場合
もしできていない場合は、.gitconfig
を下記の通りに変えて試してみてください。
[includeIf "gitdir:~/Desktop/Private/"]
path = ~/.gitconfig_account2
変更点はgitdir
の後の/i
を削除しただけです。
注意点
メインアカウントとサブアカウントでリモートリポジトリの追加方法やクローンする際のコマンドが少し違ってきます。
【メイン】リモートリポジトリの追加
メインアカウントは今まで通りで大丈夫です。
つまり、GitHubなどで指定されるコマンドをそのままコピーで構いません。
$ git remote add origin git@github.com:メインアカウントのユーザ名/リポジトリ名.git
【サブ】リモートリポジトリの追加
サブアカウントの方はGitHubなどで指定されるコマンドのままコピーしてもリモートリポジトリの追加ができません。
下記のようにコマンドを調整してください。
$ git remote add origin github.com.account2:サブアカウントのユーザー名/リポジトリ名.git
github.com.account2
の部分は、configファイルで追加したサブアカウントのHost名になるので注意してください。
【メイン】クローン
メインアカウントは今まで通りで大丈夫です。
つまり、GitHubなどで指定されるコマンドをそのままコピーで構いません。
$ git clone git@github.com:メインアカウントのユーザ名/リポジトリ名.git
【サブ】クローン
サブアカウントの方はリモートリポジトリの追加時と同じように、GitHubなどで指定されるURLなどをそのままコピーしてもクローンすることができません。
下記のようにコマンドを調整してください。
$ git clone github.com.account2:サブアカウントのユーザー名/リポジトリ名.git
github.com.account2
の部分は、configファイルで追加したサブアカウントのHost名になるので注意してください。
最後に
ただし、GitHubの利用規約では「無料アカウントは1つまで」との記載があるので、ご利用は計画的に!
プライベート用(無料)と仕事用(有料)とかなら全然OKですね!
コメント