3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数のGitHubアカウントを簡単に切り替えるコマンドの作成

Posted at

始めに

GitHubを仕事とプライベートで分けている人にとって、1つのPCでアカウントを切り替えるのは大変だと思います。以下の記事でgit cloneをフックして自動で設定するやり方が載っていましたが、中々難しそうだなと感じました。また、ローカルで初めてgitリポジトリを作った場合は設定されなさそうなのも難点でした。

複数のGitアカウントを手動切替不要で運用する

そこで明示的にどちらのアカウントを使っていくかを指定するコマンドを作ることにしました。
こちらの場合だとclone後にコマンドを1つ入力する手間がありますが、それでも比較的簡単に設定でき、ローカルでgit initした場合も対応できます。

注意

GitHubアカウントは1つ以上無料のアカウントは作ってはいけないことになっているので、この状況にいる人は少なくともどちらかは有料アカウントを持っている人になります。

User Accounts and Organizations have different administrative controls; a human must create your Account; you must be 13 or over; you must provide a valid email address; and you may not have more than one free Account.

設定方法

まずはそれぞれのGitHubアカウント用の公開鍵を設定します。github_pgithub_wは適当な名前なので、別な名前でも大丈夫です。

~/.ssh/config
Host github_p
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_github_private
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes

Host github_w
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_github_work
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes

グローバルのユーザ情報は消しておきます。これで各gitリポジトリごとに設定しない限り使用できなくなります。

$ git config --global --unset user.name
$ git config --global --unset user.email

最後にローカルでuser.name, user.email, url..insteadOfを設定します。

# プライベートの場合
$ git config user.name "個人ユーザ名"
$ git config user.email "個人メールアドレス"
# .ssh/configで設定したHost値を使用します
$ git config url."github_p".insteadOf "git@github.com"

# 仕事の場合
$ git config user.name "仕事ユーザ名"
$ git config user.email "仕事メールアドレス"
# .ssh/configで設定したHost値を使用します
$ git config url."github_w".insteadOf "git@github.com"

このinsteadOfの設定が肝で、github_pなど本来存在しないHost名をgit@github.comに変更して送信してくれます。

アカウント切り替えのコマンド作成

以上が設定内容で、最後のローカル設定を各リポジトリごとに設定すれば良いですが、これを一々やるのは大変です。そこでgitのエイリアスを作って切り替えの手間を少しだけ減らします。unsetの設定は誤って個人と仕事で逆を設定してしまった場合に打ち消せるようにするためです。

.gitconfig
[alias]
    account-p = "!git config --unset url.\"github_w\".insteadOf; git config user.name \"個人ユーザ名\"; git config user.email \"個人メールアドレス\"; git config url.\"github_p\".insteadOf \"git@github.com\";"
    account-w = "!git config --unset url.\"github_p\".insteadOf; git config user.name \"仕事ユーザ名\"; git config user.email \"仕事メールアドレス\"; git config url.\"github_w\".insteadOf \"git@github.com\";"

エイリアスが設定されれば後はコマンド一発で設定できます。

# 個人の場合
$ git account-p

# 仕事の場合
$ git account-w

なお、もし設定を忘れてコミットした場合、以下の警告が出されるので気づくことができます。(大体これが出て設定する羽目になってますが。。)

Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

終わりに

以上が複数のGitHubアカウントを簡単に切り替えるコマンドの作成方法でした。これで比較的切り替えやすくなったとはいえ、それでも手間は出てきます。GitHubはそもそもマルチアカウントで使う想定ではないため、中々厳しいかもしれません。僕はGitHub PagesやGitHub Actionsを使いたいためマルチアカウントで運用していますが・・・。
なので、仕事とプライベートで分けたい場合はGitLabなどの別サービスを利用することも視野に入れると良いと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?