一つの端末内で複数のGithubアカウントへの接続/git操作がよしなに行えるようにする
何をしたいのか
- 初回の設定だけで、commitやpushなどのgit操作の際、毎回余分な操作の必要なくリポジトリごとに最適なgit設定を適用できるようにする
- リポジトリ単位で、git操作のプロファイルを切り替える(git config)
- リポジトリ単位で、接続するgithubアカウントを切り替える(ssh)
前提
この記事では一つの端末内で会社のGithubアカウントと、個人アカウントの切り替えて使うケースを例にして説明します。
例として、会社のリポジトリは
ディレクトリ: ~/development/biz_repo/
端末内の個人アカウントのリポジトリは
ディレクトリ: ~/development/personal_repo/
としています。
git操作のプロファイルの切り替え設定
すでにgitを使っている場合は、下記のような設定が入っていると思います。
[user]
name = biz_user
email = biz_user@xxxx
~/.gitconfig
に下記設定を追加します。
[includeIf "gitdir:~/development/personal_repo/"]
path = ~/.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の設定
下記内容をファイルに追記して保存します。
# 個人アカウント用
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/config
のHost
の設定に基づいて接続してくれるようになります。
これで、
git push -u origin main
すると、無事個人アカウントに接続されるようになりました。
まとめ
以上の設定をすることで、アカウントに移動すれば自動的に個人/会社のプロファイルが切り替わるし、リモートリポジトリにpush / pullなどの操作を行う場合も、設定に応じて適切な鍵情報、接続先を選んでくれるようになりました。
Discussion