GitHubの複数アカウントを使い分ける

GitHubで個人開発用のアカウントとは別に仕事用などのアカウントを利用する際の具体的な手順をまとめました。

目次

環境

MacOS

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.3
BuildVersion:   19D2064

Git

$ git --version
git version 2.24.3 (Apple Git-128)

ディレクトリ構成

~/
├── .gitconfig
├── personal/
    ├── .gitconfig
    ├── 個人開発用のリポジトリ1
    ├── 個人開発用のリポジトリ2
    ├── ...
    └── 個人開発用のリポジトリN
└── office/
    ├── .gitconfig
    ├── 会社用のリポジトリ1
    ├── 会社用のリポジトリ2
    ├── ...
    └── 会社用のリポジトリN

sshの設定

まずsshキーを複数用意し、それぞれのGitHubのアカウントに設定します。以下のコマンドでsshキーを作成します。

$ mkdir ~/.ssh(必要であれば)
$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):git_private_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

1回目に聞かれた時点でキーの名前(ここではgit_private_rsa)を指定。
その後、2回エンターを押すとgit_private_rsaとgit_private_rsa.pubが生成されます。このキーを個人開発用に使用します。

さらに、もう一度以下のコマンドでsshキーを作成します。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):git_office_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

今回はgit_office_rsaという名前を指定します。このキーを例えば、仕事用のキーとします。

これらの生成したsshキーをGitHubで公開の設定を行います。
その際に、鍵の中身をクリップボードにコピーするのは以下のコマンドで行う。

$ pbcopy < ~/.ssh/keyname.pub (Mac)
$ clip < ~/.ssh/keyname.pub (Windows)

次に、sshの設定を行います。~/.ssh/configファイルを作成し、sshの設定を行います。

Host github-private # 個人用の設定
    User git
    HostName github.com
    IdentityFile ~/.ssh/git_private_rsa
    IdentitiesOnly yes
    AddKeysToAgent yes

Host github-office #仕事用の設定
    User git
    HostName github.com
    IdentityFile ~/.ssh/git_office_rsa
    IdentitiesOnly yes
    AddKeysToAgent yes
  • Host:任意のユニークな値
  • HostName, User:github.comとgit
  • IdentityFile:先ほど作成したsshキーの秘密鍵のファイルパス作成した秘密鍵のファイルパス
  • IdentitiesOnly:複数のキーを保持している場合に、設定された鍵のみを使用するかどうかを設定。
  • AddKeysToAgent:キーとパスフレーズをssh-agentへ自動的に追加するかどうかを設定。

    git config

    以下のディレクトリ構成を想定しています。
    ここでは、アカウント操作の間違いを起こさないためにglobalの設定は行わないとします。
    すでに設定している場合は、以下のコマンドでglobalの設定を削除します。

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

まず、~/.gitconfigを次のように設定します。

[includeIf "gitdir:~/personal/"]
    path = ~/personal/.gitconfig

[includeIf "gitdir:~/office/"]
    path = ~/office/.gitconfig

includeIfを利用することで、.gitconfigを条件付きで読み込むことができます。gitdirに読み込み先のディレクトリを指定します。このようにすることで、各ディレクトリで異なるconfigファイルを読み込むことができます。
そして、次のようにそれぞれのconfigファイルを作成します。まず、~/personal/.gitconfigは

[user]
  name = abc
  email = abc@example.com
[url "git@github-personal"]
    insteadOf = "git@github.com"

~/office/.gitconfigは

[user]
  name = def
  email = def@example.com
[url "git@github-office"]
    insteadOf = "git@github.com"

insteadOfを利用すると、gitコマンド使用時に、insteadOfで指定した文字列が、urlで指定した文字列に置き換えられて実行される。ここでは、gitコマンド使用時にgit@github.comがgit@github-officeに置き換えられてから実行される。

以上の設定を行うことで、GitHubの複数アカウントを使い分けることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次