この記事を読んで欲しい人
- 複数のGitアカウントを使い分けたい
- 仕事用(メイン用)とプライベート用(サブ用)で使い分けたい
今回やったこと
- Macのターミナルで使用しているシェルであるzshの設定ファイルである./zshrcに、local.user/emailを設定するシェルスクリプトを記載
- sshキーを使い分けて、それぞれのアカウントのリポジトリへアクセス
手順
1. keyの作成
- メイン用とサブ用で使用するGitユーザー用をそれぞれ作成する
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):{好きな名前
}
2. それぞれのGitアカウントに鍵登録
- 先ほど作成した公開鍵をコピー
- Mac:
$ pbcopy < ~/.ssh/{作成時の鍵名前}.pub
- Windows:
$ clip < ~/.ssh/{作成時の鍵名前}.pub
- Mac:
- git鍵設定画面でコピーしたものを貼り付けて、好きな名前で登録
3. ~/.ssh/configを記載(ない場合は作成して記載)
例:
# メイン用
Host github github.com
HostName github.com
User {メイン用のユーザー名}
IdentityFile ~/.ssh/{メイン用のkeyname}
# サブ用
Host tiga-ga
HostName github.com
User {サブ用のユーザー名}
IdentityFile ~/.ssh/{サブ用のkeyname}
4. 接続確認
例:
$ ssh -T git@github
Hi {メインユーザー名}! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@github.com
Hi {メインユーザー名}! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@tiga-ga
Hi {サブユーザー名}! You've successfully authenticated, but GitHub does not provide shell access.
5. zshの設定ファイルである./zshrcを更新
※zsh使っていない方は別のシェルの設定ファイルでも問題ないです!
vi ~/.zshrc
で編集
# メイン用(メインはglobalで設定)
function gitmain() {
git config --global user.name "{メインgitユーザー名}"
git config --global user.email "{メインgitメールアドレス}"
}
# サブ用(サブはlocalで設定)
function gitsub() {
git config --local user.name "{サブgitユーザー名}"
git config --local user.email "{サブgitメールアドレス}"
}
source ~/.zshrc
で再読み込み
6.リポジトリクローン
リポジトリクローンする時は、SSH用のURL?をコピーしておく
メイン用のリポジトリをクローンする時
git clone {コピーしたもの}
詳しく書くと、
git clone git@{メイン用のHost}:{ユーザー名}/{リポジトリ名}.git
上記手順の~/.ssh/configの場合、
git clone git@github.com:{ユーザー名}/{リポジトリ名}.git
※~/.ssh/config記載時にメイン用のHostをHost github github.com
ではなく、他の名前にした場合は、コピーしたものを編集してからクローンする必要あり
サブ用のリポジトリをクローンする時
git clone git@{サブ用のHost}:{ユーザー名}/{リポジトリ名}.git
上記手順の~/.ssh/configの場合、
git clone git@tiga-ga:{ユーザー名}/{リポジトリ名}.git
7. プッシュしてみる
- (ホームディレクトリで1回だけ実行)まずは、gitのconfig情報(user.nameとuser.email)のglobal設定をするために、gitmainを実行する
※リポジトリごとに毎回実行する必要はなく、一回だけ打てば良い。だったらzshrcに書く必要がないかも、、 -
$ gitmain
を実行
このように設定されていればOK!
$ git config -l
...
user.name={メイン用ユーザー名}
user.email={メイン用メールアドレス}
...
remote.origin.url=git@{メイン用HostID}:{メインユーザー名}/{リポジトリ名}.git
...
メイン用のリポジトリの場合
-
cd {クローンしたリポジトリ}
で移動して、そのまま変更してpushすればOK
サブ用のリポジトリの場合
-
cd {クローンしたリポジトリ}
で移動 - (リポジトリごとに毎回実行)gitのconfig情報(user.nameとuser.email)のlocal設定をするために、
$ gitsub
を実行
このように設定されていればOK!
$ git config -l
...
user.name={メイン用ユーザー名} ※global
user.email={メイン用メールアドレス} ※global
...
remote.origin.url=git@{サブ用HostID}:{サブ用ユーザー名}/{リポジトリ名}.git
...
user.name={サブ用ユーザー名} ※local
user.email={サブ用メールアドレス} ※local
この場合、globalよりlocalの方が優先されるため、そのまま変更してpushすればOK
以下のブログは、gitconfigについて理解したい方におすすめです!
まとめ
複数のGitアカウントを管理したい方のお役に立てればと思います!!
警告
ここまでSSH接続でGitリポジトリへ操作する方法をご紹介しましたが、鍵がハードディスク上のユーザアクセスが可能なファイルとして保存されることが欠点。
SSHキーの管理は気をつけましょう。
参考)【解説】【GitHub】HTTPSとSSHの違い