「仕事」と「プライベート」で別々にGitHubアカウントを利用する方法を解説します。
「新規アカウントの鍵登録」「鍵を切り替えてgitコマンドを実行できるようにするための準備」「コミッタ情報(名前・アドレス)の切り替え」といった作業が必要になります。
新規アカウントの鍵登録
新規アカウント用の鍵を生成
まず、新規アカウント用の秘密鍵、公開鍵を生成します。
ここでは、 ~/.ssh
内に xxxディレクトリ
を作成して、その配下に鍵を配置します。
$ mkdir ~/.ssh/xxx
ssh-keygenコマンド
で鍵を生成します。-Cのコメント部分には、 GitHubに登録しているメールアドレス
を指定します。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/xxx/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
以下のように秘密鍵( id_rsa
)、公開鍵( id_rsa.pub
)が生成されました。
$ ls ~/.ssh/xxx/
id_rsa id_rsa.pub
作成した公開鍵をGitHubに登録
右上メニューのSettings
> SSH and GPG keys
> New SSH key
の順で選択すると鍵登録画面が表示されます。
Title
には、どの鍵なのか判断するための文字列を入力します。
Key
には、公開鍵を入力します。 cat ~/.ssh/xxx/id_rsa.pub | pbcopy
とすると公開鍵の内容をコピーできるので、そのまま Key
のフォームに貼り付けます。
Title
Key
を入力し終えたら、 Add SSH Key
をクリックします。
接続確認
以下コマンドで接続確認できます。
$ ssh -i ~/.ssh/xxx/id_rsa -T git@github.com
Enter passphrase for key '/Users/xxxx/.ssh/xxx/id_rsa':
Hi xxxx You've successfully authenticated, but GitHub does not provide shell access.
You've successfully authenticated
と表示されればOKです。
アカウント使い分け
~/.ssh/configを編集
以下のように、 ~/.ssh/config
に利用する複数のアカウント情報を記述します。
Host github.com-job
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes
Host github.com-private
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/xxx/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes
Host
には 任意の接続名
を記述します。
アカウントを使い分けてcloneを実行
git clone github.com-job:username/repo.git
と実行すると、 ~/.ssh/id_rsa
のアカウント情報が利用されます。
git clone github.com-private:username/repo.git
と実行すると、 ~/.ssh/xxx/id_rsa
のアカウント情報が利用されます。
コミッタ情報(名前・アドレス)切り替え
以下の2つの方法で、コミッタ情報(ユーザー名とメールアドレス)も変更することができます。
方法1 「.git/config」で設定
リポジトリごとに以下コマンドで利用するユーザー名、メールアドレスを設定します。
git config --local user.name "your_name"
git config --local user.email "your_email"
リポジトリ内の .git/config
に書き加えられ、設定したユーザー名、メールアドレスが使用されます。
方法2 direnvを利用
https://github.com/direnv/direnv を利用すると、特定のディレクトリ配下にだけ環境変数を設定することができます。
コミッタ情報は、環境変数でも設定できるので、direnvを活用すればディレクトリごとにコミッタ情報を変更できます。
利用イメージは以下のようになります。
├── repositories_xxx
│ ├── repository_A (コミッタ情報1)
│ └── repository_B (コミッタ情報1)
└── repositories_yyy
├── repository_C (コミッタ情報2)
└── repository_D (コミッタ情報2)
インストール
MacでHomebrewを利用している場合、以下コマンドでインストールできます。
$ brew install direnv
~/.bashrc編集
~/.bashrc
に以下のように記述します。
eval "$(direnv hook bash)"
設定反映させるために以下コマンドを実行します。
$ source ~/.bashrc
他のシェルを利用している場合、https://github.com/direnv/direnv#bash を参考にしてください。
特定ディレクトリ配下で有効となる環境変数を設定
環境変数を設定したいディレクトリに移動します。.envrc
を作成します。
$ vi .envrc
.envrc
には、以下、4つの環境変数を設定します。
export GIT_COMMITTER_NAME="your_name"
export GIT_COMMITTER_EMAIL="your_email"
export GIT_AUTHOR_NAME="your_name"
export GIT_AUTHOR_EMAIL="your_email"
編集完了後、下記コマンドを実行します。
$ direnv allow
以下のように、環境変数が設定され、ディレクトリごとにコミッタ情報を変更できるようになりました。
$ env | grep GIT
GIT_AUTHOR_NAME=your_name
GIT_COMMITTER_NAME=your_name
GIT_COMMITTER_EMAIL=your_email
GIT_AUTHOR_EMAIL=your_email