はじめに
GitHubをプライベートでも、仕事でも使用している場合、アカウントが複数になってしまうことがあるかと思います。そのような場合の設定を忘備録としてまとめてみました。
~/.sshのファイル構成
~/.sshは下記のような構成にします。ファイル名は公開鍵・秘密鍵を作ってしまったあと、適当に変えても問題ありません。
.ssh/
├── config
├── id_private_rsa
├── id_private_rsa.pub
├── id_work_rsa
├── id_work_rsa.pub
└── known_hosts
id_private_rsa、id_private_rsa.pubはプライベート用で、id_work_rsa、id_work_rsa.pubは仕事用の公開鍵・秘密鍵です。
プライベート用・仕事用それぞれの秘密鍵の呼び出し方がconfigファイルに記載されています。
公開鍵・秘密鍵の生成については、こちらの記事などを参考にして下さい(GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~)
GitHubには公開鍵であるxxxx.pubの内容をアップロードします。秘密鍵であるid_private_rsa
とid_work_rsa
は原則誰にも見られないように秘匿します。
configファイルの内容
Host github-private
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_private_rsa
TCPKeepAlive yes
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
Host github-work
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_work_rsa
TCPKeepAlive yes
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
Host GitHub-private
、Host GitHub-work
で定義した内容でプライベート用・仕事用の秘密鍵を利用することができます。
詳細についてはこちらの記事などを参考にして下さい ( .ssh/configファイルでSSH接続を管理する)
プライベート用のGitHubに接続する場合はこちらです。
git@github-private:"PRIVATE_ACCOUNT"/"REPOSITORY"
仕事用のGitHubに接続する場合はこちらです。
git@github-work:"WORK_ACCOUNT"/"REPOSITORY"
コミットした作者名とメールアドレスを切り替える
GitHubではコミットした作者の名前とメールアドレスが記録されます。当然プライベート用・仕事用で切り替えたいので、下記のようにします。
まず通常のgit操作で(例外を設定なければ)記録される作者名とメールアドレスは下記のように --global
オプションをつかって、~/.gitconfig
に設定します。
$ git config --global user.name "NAME"
$ git config --global user.email "EMAIL"
~/.gitconfig
を見ると下記のようになっています。
[user]
name = "NAME"
email = "EMAIL"
しかしながら、上記以外の作者名とメールアドレスを記録したい場合(例えば--globalで会社向けにした場合にプライベート用の作者名とメールアドレスを使いたい場合)それぞれのリポジトリーに移動して、 --local
オプションを使って設定します。
$ git config --local user.name "NAME"
$ git config --local user.email "EMAIL"
上記のコマンドを実行した結果、それぞれのリポジトリーの下の /.git/config
ファイルに --global
と同じく
[user]
name = "NAME"
email = "EMAIL"
が書き込まれます。
Sourcetreeを使う場合の注意
GitHubの操作にコマンドラインではなく、 Sourcetree などのGUIツールを使っている方もいると思います。
Sourcetreeは --global
オプションで設定した作者名とメールアドレスを上書きしてしまう機能があるので注意が必要です。(configファイルを書き換えるわけではなく、Sourcetreeが無視するという動作になります)
「環境設定」メニュー、「一般」タブの上部にある「SourcetreeにMercurialとGitのグローバル設定ファイルの変更を許可する」がチェックされていると上書きされてしまいます。
ただし、これは--global
のみで、--local
オプションで設定したリポジトリー毎の作者名とメールアドレスは変更されません。