Git
GitHub

gitで複数のgithubアカウントを使う

基本的にこのgithubアカウントで作業したいけど、特定のディレクトリでは別のgithubアカウントを使いたいという、限定的なやつ。
アカウントごとにssh keyを発行するのは面倒そうだったので、認証情報はMacのキーチェーンアクセスで管理し、それを使い分けるようにした。1

gitconfig
# キーチェーンアクセスをcredential helperとして使う
[credential]
  helper = osxkeychain

# 個人用の設定(基本的に個人用のアカウントを使う)
[include]
  path = ./credentials/private

# gitディレクトリがgithub.com/Kaisya以下にあるとき、会社用の設定を使う
[includeIf "gitdir:github.com/Kaisya/"]
  path = ./credentials/work

includeするファイルには使いたいアカウントのuser.nameuser.emailを書いておく。2

./credentials/private
[user]
  name = "private"
  email = "private@example.com"

[credential]
  username = "private"
./credentials/work
[user]
  name = "work"
  email = "work@example.com"

[credential]
  username = "work"

どちらのファイルにもcredential.usernameが含まれているけど、ここではgithubのログインに使うアカウント名を指定する。
このアカウント名からcredential.helperで管理しているgithub.comにログインする認証情報を取り出しているっぽい。
上記の例だと、個人用のアカウントではprivateというアカウントでログインし、会社用のアカウントではworkというアカウントでログインしている。

これで会社と個人のgithubアカウントを使い分けることができるようになった。
うまくいかなかったらごめんちゃい。


追記

後からincludeする./credentials/workの情報でprivateリポジトリをfetch/pullしようとするとnot foundになってしまった。
(この記事の例だと、会社のリポジトリがprivateだと、fetch/pullできない。)
ただ、./credentials/workだけをincludeすると、問題なくfetch/pullできた。
そういう仕様なのか、ちゃんと見てないので、そのうち調べます。


  1. キーチェーンアクセスに複数のgithubアカウントが登録できない人はMacのキーチェーンアクセスに手動でgithubアカウントを追加するをどうぞ 

  2. includeIfの指定の仕方は公式のドキュメントをどうぞ