【GitHub】複数アカウント管理のための効率的な設定方法
GitHubで複数のアカウントを持っている方に向けて、アカウント切り替えの手間を軽減する設定方法を備忘録として共有します。
最近、個人プロジェクトと社用プロジェクトを横断して作業する機会が増え、それぞれのアカウントでの設定を都度切り替えるのが非常に面倒に感じていました。より効率的な方法を模索した結果、うまく機能する方法を見つけることができたので、その方法を備忘録として共有します。
対象者
- 複数のGitHubアカウントを持っている(または持つ予定のある)方
- 設定変更の手間を減らしたい方
ファイルとディレクトリ構成
以下のファイル、ディレクトリ構成を前提に進めます。
.gitconfig
.gitconfig-personal
.gitconfig-company1
.gitconfig-company2
.ssh/
Workspace
├── personal
│ ├── Repo1/
│ └── Repo2/
├── company1
│ ├── Repo1/
│ └── Repo2/
└── company2
├── Repo1/
└── Repo2/
アカウント別設定
Workspace以下のディレクトリごと(GitHubアカウントごと)にgithubの設定ファイルを分けています。
例)個人用設定例
# ~/.gitconfig-personal
[user]
name = Personal
email = personal@xxx.com
例)会社用設定例
# ~/.gitconfig-company1
[user]
name = company1
email = company1@yyy.com
# ~/.gitconfig-company2
[user]
name = company2
email = company2@zzz.com
設定の自動適用
それぞれの設定ファイルを .gitconfig
ファイルで pathを明示的に配置していきます。
# ~/.gitconfig
~~その他の設定~~
[includeIf "gitdir:~/Workspace/personal/"]
path = ~/.gitconfig-personal
[includeIf "gitdir:~/Workspace/company1/"]
path = ~/.gitconfig-company1
[includeIf "gitdir:~/Workspace/company2/"]
path = ~/.gitconfig-company2
これでそれぞれのプロジェクトでのgitユーザーが、アカウント別に設定されているはずです。
Personal Access Token
せっかくアカウント別に分けたので、Personal Access Tokenもここで設定しておきたい。
アカウント別にSSHキーの作成
まず、各GitHubアカウントに対して異なるSSHキーを生成します(すでにキーがある場合はこのステップは不要です)。
次のコマンドを使用してキーを生成できます。
# それぞれのアカウントごとに生成
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
コマンドを実行する際に、キーにユニークな名前を指定するよう求められます(例:id_personal_github)。
GitHubにSSHキーを追加
対象のアカウントにログインし、こちら にアクセスし、 生成したSSHキーの公開キー(例:id_personal_github.pub)をGitHubアカウントに追加します。
# 公開鍵のコピー
pbcopy < ~/.ssh/id_personal_github.pub
そして、 ~/.ssh/config
ファイルを編集(または作成)し、GitHubのホストごとに異なるSSHキーを指定します。以下は設定例です。
# Personal
Host github.com-personal
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_personal_github
# Company1
Host github.com-company1
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_company1_github
# Company2
Host github.com-company2
HostName github.com
User git
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_company2_github
Host はアカウント別に任意の識別名を使い、IdentityFile で使用するキーのパスを指定します。
Gitリポジトリでの設定
リポジトリの設定を変更して、正しいSSH設定を使用するようにします。
git remote set-url origin git@github.com-personal:personal/Repo.git
※ github.com-personal は上述のSSH設定ファイルに設定したHostの識別名です。