仕事とプライベートとで別々のGitアカウントを使用する必要が出てきた際に、プライベートと仕事での開発とで環境を切り替えがわりと面倒だったので、今後迷わないように記録する。
アカウントの新規作成(ざっくり)
1. 新しいメールアドレスでGithubアカウントを作る
2. sshキーを作る
~/.ssh/conifgファイルに下記の様なフォーマットで秘密鍵のパスを指定する。
Host github
HostName github.com
IdentityFile ~/.ssh/main_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
Host github-sub
HostName github.com
IdentityFile ~/.ssh/sub_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
# github-subとgithubは任意
# IdentityFileのファイル名も任意
3. 接続確認
ssh -T <HOST>
と打つとssh接続ができるか確認できる。
接続が完了すると下記の様なレスポンスが返ってくる。
Hi takuyama29! You've successfully authenticated, but GitHub does not provide shell access.
(エラーっぽいけどエラーじゃないから大丈夫)
4. remote url設定
git remote add origin git@github.com:<ACCOUNT_NAME>/<YOUR_REPSITORY>.git
5. ターミナルのアカウント切り替え
$ git config --global user.name "<YOUR_NAME>"
$ git config --global user.email <YUOR_EMAIL>
これで新しいアカウントの追加が出来てめでたしめでたし。
困ったこと
困ったのはここから。
このまま元のGitアカウントに戻って作業してpushとかするとエラーになる。
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
"リポジトリはあるけど、アクセス権が無いよ"
と言われて困る。
この事象の原因は2つある。
1. Githubユーザーが違う
ターミナルで設定されているGithubアカウントが意図しているものと異なっている。
現在設定されているアカウント情報は$ git config --list
で一覧表示することが可能。
その中のuser.name
とuser.email
が新しいアカウントのままになっていることが今回の事象の原因の一つ。
そのため、本来は開発作業をするアカウント別にCLIの設定も変更する必要がある(↓コレ)。
$ git config --global user.name "<YOUR_NAME>"
$ git config --global user.email <YUOR_EMAIL>
これを毎回切り替えるのは面倒なので、せめてコマンドで切り替えたい。
大した知識もないため、一旦shellコマンドとして利用するためにrcファイルに下記を追記した。
function tomain() {
git config --global user.name "<MAIN_ACCOUNT>"
git config --global user.email <MAIN_ADDRESS>
}
function tosub() {
git config --global user.name "<SUB_ACCOUNT>"
git config --global user.email <SUB_ADDRESS>
}
これで$ tomain
と$ tosub
でひとまずアカウントの切り替えができる。
※もっとちゃんとしたやり方があると思うので、知っている方はご教示いただければと!
2. remote urlのHost名が重複している
これも微妙に気づくのに時間がかかった。
冒頭で書いた~/.ssh/configファイルの追記内容。
Host github
HostName github.com
IdentityFile ~/.ssh/main_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
Host github-sub
HostName github.com
IdentityFile ~/.ssh/sub_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
これだと微妙に困ったことになる。
$ git remote add origin git@github.com:<ACCOUNT_NAME>/<YOUR_REPSITORY>.git
した時に、HostName
がどちらもgithub.com
なので、configファイルの下部に定義されたものが有効になってしまう。
この場合だと、Githubへ接続する際には、毎回IdentityFile ~/.ssh/sub_rsa
を参照してしまうので、メインアカウントでの接続の際に秘密鍵と公開鍵の整合性が合わなくなるからだ。
そのため、remote urlを設定する際には、Host名が重複しない様に設定する必要がある。
メイン
$ git remote add origin git@github:<ACCOUNT_NAME>/<YOUR_REPSITORY>.git
サブ
$ git remote add origin git@github-sub:<ACCOUNT_NAME>/<YOUR_REPSITORY>.git
上記の様に~/.ssh/configファイルで設定したHost名別に分けてremote urlを設定すればOK
これ系のちょっとした環境設定とかは頻度も少ないので、少しずつ記録として残していきたい。