一つの端末内で複数のGithubアカウントへの接続/git操作がよしなに行えるようにする


何をしたいのか

  • 初回の設定だけで、commitやpushなどのgit操作の際、毎回余分な操作の必要なくリポジトリごとに最適なgit設定を適用できるようにする
    • リポジトリ単位で、git操作のプロファイルを切り替える(git config)
    • リポジトリ単位で、接続するgithubアカウントを切り替える(ssh)

前提

この記事では一つの端末内で会社のGithubアカウントと、個人アカウントの切り替えて使うケースを例にして説明します。
例として、会社のリポジトリは
ディレクトリ: ~/development/biz_repo/

端末内の個人アカウントのリポジトリは
ディレクトリ: ~/development/personal_repo/

としています。

git操作のプロファイルの切り替え設定

すでにgitを使っている場合は、下記のような設定が入っていると思います。

~/.gitconfig
[user]
	name = biz_user
	email = biz_user@xxxx

~/.gitconfigに下記設定を追加します。

[includeIf "gitdir:~/development/personal_repo/"]
	 path = ~/.gitconfig_personal

更に、個人アカウント用のプロファイルを作成します。

~/.gitconfig_personal
[user]
	name = personal_user
	email = personal_user@xxxx

以上で、 ~/development/personal_repo/ 内におけるgit操作は、personal_userの設定が使用されるようになります。

接続先のGithubアカウントの切り替え設定

接続先はGithubに限らず、Bitbucketなどその他リモートリポジトリについても可能なので、適宜読み替えてください。

Githubへの鍵登録

詳細な手順は下記参照。
参考:新しい SSH キーを生成する

今回は、

  • プライベートな鍵: ~/.ssh/github_personal
  • 会社の鍵: ~/.ssh/github_biz
    として保存しています。

.ssh/configの設定

下記内容をファイルに追記して保存します。

~/.ssh/config
# 個人アカウント用
Host github_personal
  HostName github.com
  User git
  IdentityFile /Users/xxxx/.ssh/github_personal
# 会社アカウント用
Host github_biz
  HostName github.com
  User git
  IdentityFile /Users/xxxx/.ssh/github_biz

gitのremoteの設定

もし各アカウントのリポジトリに対応するディレクトリでgit設定がされていない場合は完了しておきます。

cd ~/development/personal_repo/
git init

リモートリポジトリの登録を行います。

cd ~/development/personal_repo/
git remote add origin git@github_personal:[個人アカウントのGithubユーザ名]/personal_repo.git

ポイントとしては、git@github_personalの部分のホスト名を ~/.ssh/configで設定されたHostに対応させておくことです。
こうすることで、今後リモートリポジトリに対して何らかの操作を行う際、~/.ssh/configHostの設定に基づいて接続してくれるようになります。

これで、

git push -u origin main

すると、無事個人アカウントに接続されるようになりました。

まとめ

以上の設定をすることで、アカウントに移動すれば自動的に個人/会社のプロファイルが切り替わるし、リモートリポジトリにpush / pullなどの操作を行う場合も、設定に応じて適切な鍵情報、接続先を選んでくれるようになりました。