概要
1つのマシン(PC)で会社のGitHubアカウントと個人のGitHubアカウントの両方を使いたい場合があります。今回のブログ投稿では、複数のGitHubアカウントを1つのマシンで設定して使う方法について説明します。
SSHキーの生成
複数のGitHubアカウントを使うためには、SSHキーを生成する必要があります。私はmacOS
を使用しているため、macOS
を基準に説明します。
まず、.ssh
ディレクトリに移動します。
cd ~/.ssh
その後、ssh-keygen
コマンドを使用してSSHキーを生成します。まず、個人アカウント用のSSHキーを生成します。
ssh-keygen -t rsa -b 4096 -C "GITHUB_PERSONAL_ACCOUNT_EMAIL"
すると、次のようにどの名前でキーを保存するか尋ねられます。
Enter file in which to save the key (/Users/user_name/.ssh/id_rsa):
私は区別しやすくするため、id_rsa_personal
という名前で保存しました。その後、会社アカウント用のSSHキーを生成します。
ssh-keygen -t rsa -b 4096 -C "GITHUB_COMPANY_ACCOUNT_EMAIL"
同様に、どの名前でキーを保存するか尋ねられます。
Enter file in which to save the key (/Users/user_name/.ssh/id_rsa):
私は区別しやすくするため、id_rsa_work
という名前で保存しました。
GitHubにSSHキー登録
生成したSSHキーをGitHubに登録する必要があります。まず、個人アカウントにSSHキーを登録してみましょう。
次のコマンドを実行すると、SSHキーを確認できます。
cat ~/.ssh/id_rsa_personal.pub
表示されたSSHキーをコピーし、GitHubのウェブサイトにアクセスしてSettings
-> SSH and GPG keys
-> New SSH key
をクリックしてSSHキーを登録します。この時、GitHubのウェブサイトには個人アカウントでログインしている必要があります。
これと同様の方法で会社アカウントにSSHキーを登録します。この時、GitHubのウェブサイトには会社アカウントでログインしている必要があります。
configの設定
このように設定したSSHキーを使ってGitHubのアカウントを区別するために、~/.ssh/config
ファイルを次のように編集します。
# personal
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_personal
# work
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_work
そして、ターミナルで次のコマンドを実行してSSHキーが正しく登録されているか確認します。
ssh -T git@personal
次のようなメッセージが表示されたら、正常に登録されていることになります。
Hi GITHUB_PERSONAL_ACCOUNT! You've successfully authenticated, but GitHub does not provide shell access.
同様に、会社アカウントについても次のコマンドを実行してSSHキーが正しく登録されているか確認します。
ssh -T [email protected]
同じく、次のようなメッセージが表示されたら、正常に登録されていることになります。
Hi GITHUB_COMPANY_ACCOUNT! You've successfully authenticated, but GitHub does not provide shell access.
クローン(clone)
これでGitHubからプロジェクトをクローンする際、次のように個人アカウントと会社アカウントを区別して使うことができるようになります。
# Personal account
git clone git@personal:GITHUB_PERSONAL_ACCOUNT/REPOSITORY.git
# Company account
git clone [email protected]:GITHUB_COMPANY_ACCOUNT/REPOSITORY.git
Gitユーザ設定
次のコマンドを実行すると、Git
に設定されたuser.name
とuser.email
を確認できます。
# Check user name
git config user.name
# Check user email
git config user.email
Git
のGlobal
設定にユーザ情報を登録していない場合、コマンドを実行した時、何も表示されないはずです。
.gitconfig
ファイルを編集してGlobal
ユーザを設定し、特定のフォルダで使うユーザを設定することができます。
まず、~/.gitconfig-work
ファイルと~/.gitconfig-personal
ファイルを作成し、次のように編集します。
~/.gitconfig-work
# code ~/.gitconfig-work
[user]
name = "GITHUB_COMPANY_ACCOUNT_USER_NAME"
email = GITHUB_COMPANY_ACCOUNT_EMAIL
~/.gitconfig-personal
# code ~/.gitconfig-personal
[user]
name = "GITHUB_PERSONAL_ACCOUNT_USER_NAME"
email = GITHUB_PERSONAL_ACCOUNT_EMAIL
その後、.gitconfig
ファイルを次のように編集します。
# code ~/.gitconfig
# This is for Global settings
[user]
name = "GITHUB_COMPANY_ACCOUNT_USER_NAME"
email = GITHUB_COMPANY_ACCOUNT_EMAIL
# For company account
[includeIf "gitdir:~/WORK/"]
path = ~/.gitconfig-work
# For personal account
[includeIf "gitdir:~/PERSONAL/"]
path = ~/.gitconfig-personal
この設定では、Git
のGlobal
ユーザとして会社アカウントを設定しました。WORK
フォルダでは会社アカウントを使うようにして、PERSONAL
フォルダでは個人アカウントを使うように設定しました。
うまく設定されたか確認するために、PERSONAL
フォルダに移動します。その後、次のコマンドを実行してユーザ情報を確認します。
cd ~/PERSONAL
git config user.name
git config user.email
すると、次のようにGit
のGlobal
ユーザ情報が表示されます。
# git config user.name
GITHUB_COMPANY_ACCOUNT_USER_NAME
# git config user.email
GITHUB_COMPANY_ACCOUNT_EMAIL
これは、現在のフォルダ(PERSONAL
)にGit
プロジェクトが存在しないため、単にGit
のGlobal
ユーザ情報が表示されているだけです。
そしたら、次のように実際にGit
プロジェクトを作成し、Git
のユーザ情報を確認してみましょう。
mkdir ~/PERSONAL/temp
cd ~/PERSONAL/temp
git init
git config user.name
git config user.email
すると、次のようにGit
の個人アカウントのユーザ情報が表示されます。
GITHUB_PERSONAL_ACCOUNT_USER_NAME
GITHUB_COMPANY_ACCOUNT_EMAIL
これは私たちが.gitconfig
に設定した内容が反映された結果です。
[includeIf "gitdir:~/PERSONAL/"]
path = ~/.gitconfig-personal
完了
これで1つのマシンで複数のGitHubアカウントを使う方法について説明しました。これにより、複数のGitHubアカウントを使いながら、プロジェクトを管理する際に便利になると思います。
また、.gitconfig
を使って特定のフォルダで使うユーザを設定する方法についても説明しました。これにより、Git
のユーザ情報を簡単に変更できるようになります。
皆さんも複数のGitHub
アカウントを使う必要がある場合は、このブログ投稿を参考にして複数のGitHub
アカウントを設定して使ってみてください。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。