1台のPCで複数のGitHubアカウントを使い分けることは可能か?

下記の手順で可能です

  1. Gitの設定
  2. GitHubアカウント作成
  3. あたらしく作成したGit用のSSH鍵を作成

Gitの設定

Gitの設定確認

Gitのグローバル設定で、現在のユーザー名、メールアドレスを表示して確認する

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

上記とは違う設定を使用する管理方法でします。

グローバルはプライベート用で、それとは別で仕事用を作成するイメージです

もう1つのGitHubアカウントを作る

GitHub ローカルPC SSH接続

共通ディレクトリで新しい別のGit設定

(新しいGitの設定を各リポジトリごとに設定する方法もありますが、今回は共通ディレクトリに設定します)

まずはグローバルの設定ファイルに下記の追記

~/.gitconfig

[user]
	name = LAPTOP-2C4PL9J8\\jingt
	email = 10121012tt@gmail.com

[difftool "sourcetree"]
	cmd = "'' "

[mergetool "sourcetree"]
	cmd = "'' "
	trustExitCode = true

[core]
	autoCRLF = false

# 仕事用リポジトリの設定を読み込む
[includeIf "gitdir:C:/work/"]
  path = ~/.gitconfig_work

gitdir:C:/work/ というパスにある Gitリポジトリの中で作業しているときだけ
~/.gitconfig_work という 追加設定ファイルを読み込む

Windowsの場合パスは絶対で記述

記述方法動く環境解説
gitdir:~/.../macOS / Linux ✅~ をシェルが解釈するからOK
gitdir:C:/Users/.../Windows ✅絶対パスを書くのが確実!

個人アカウント用のプロファイルを作成(~/.gitconfig_work)

# 仕事用GitHubアカウント設定
[user]
    name = "xxxx-work"
    email = "xxxx@gmail.com"

新しいアカウントで使いたいリポジトリのフォルダ群を含む共通ディレクトリへ移動

cd path/to/your/newgitfolder

下記で設定を確認すると

git config user.name
git config user.email

グローバルの設定と同じです、、あれ!となりますがgit initすることで

新しいく設定したgitの設定を確認できます。

PS C:\work\test> git config user.name
LAPTOP-xxxx\username
PS C:\work\test> git init
Initialized empty Git repository in C:/work/test/.git/
PS C:\work\test> git config user.name
xxxx-work

なぜ git init が必要なのか?
includeIf “gitdir:…” は 「Gitリポジトリ内に入ったときだけ」 有効になる仕組み

だから、.git ディレクトリがない場所では何も切り替わらない!

項目説明
GitHubユーザー名yamada-taroGitHubにログインするためのID
GitHubメールtaro.yamada@example.comGitHubに登録してるメールアドレス
Git user.name山田 太郎(または yamada-taroコミット作者として表示される名前
Git user.emailtaro.yamada@example.comコミット作者のメール(GitHubと一致推奨)

SSH鍵の設定

  1. サブアカウント用のSSH鍵を生成

どこのディレクトリでもOK

PS C:\work> ssh-keygen -t ed25519 -C "your-email@gmail.com" -f ~/.ssh/id_ed25519_github_work
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

// 「パスフレーズ(鍵のロック)をつけますか?」
// 空のまま Enterで開発環境ではこれが多い(毎回入力なし)
Your identification has been saved in C:\Users\username\.ssh\id_ed25519_github_work
Your public key has been saved in C:\Users\username\.ssh\id_ed25519_github_work.pub
The key fingerprint is:
SHA256:xxxxxx your-email@gmail.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

下記で公開鍵を表示してGithubにコピペ

G Settings Add new SSH Key Title my-laptop Key type Authentication Key Key ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAbc123def456ghi789jkl012mno345pqr 678stu901vwx234yz user@example.com Add SSH key
Get-Content C:\Users\username\.ssh\id_ed25519_github_work.pub
  1. .ssh/configファイルの設定
# GitHub ワークアカウント用 SSH 設定
Host github.com-ida-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_work
    IdentitiesOnly yes

テスト

PS C:\work> ssh -T git@github.com-xxxx
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
  1. リモートURLを確認
git remote -v
  1. 問題なければpush
git push -u origin main

SSH鍵を使ってリモートURLを指定する(403エラー対策)

複数アカウントを使い分けていて、
git push 時に「403」エラーや他アカウント扱いになる場合

プッシュ時の認証がおかしい場合があります

リモートURLの形式を確認する

git remote -v

↓こんな感じになっていたら、HTTPS形式なので修正が必要です

origin  https://github.com/work/fastapi-apprunner.git (fetch)
origin  https://github.com/work/fastapi-apprunner.git (push)

SSHに変更する(しかもアカウント切替対応のHost指定で)

git remote set-url origin git@github.com:<ユーザー名>/<リポジトリ名>.git

設定後の確認とpush

git remote -v  # URLが変わったか確認
git push -u origin main

SSH設定の不備

PS C:\work\my-project> git push -u origin main
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

HTTPSとSSHの比較

認証フロー

  • HTTPS認証の流れ

  1. git push 実行
  2. GitHubが「ユーザー名とトークン出して」と要求
  3. ユーザー名 + Personal Access Tokenを送信(HTTPベーシック認証)
  4. GitHubが「このトークン有効?このリポジトリにアクセス権ある?」をチェック
  5. OKなら処理続行、NGなら403エラー

  • SSH認証の流れ

  1. git push 実行
  2. SSH接続開始(ポート22)
  3. クライアントが秘密鍵で署名を作成して送信
  4. GitHubが登録済み公開鍵で署名を検証
  5. 検証OKなら認証完了、処理続行
項目HTTPSSSH
認証方法HTTPベーシック認証(ユーザー名 + Personal Access Token)公開鍵暗号方式(RSA/Ed25519鍵ペア)
初期設定簡単やや複雑
複数アカウント管理困難(認証情報が混同する)容易(Host名で区別可能)
認証情報の保存場所OS標準の認証情報マネージャーSSH鍵ファイル
キャッシュ問題あり(古い認証情報が残る)なし
セキュリティ普通高い
ファイアウォール通りやすい制限される場合あり
パスワード管理必要(定期更新推奨)不要
接続テストgit ls-remotessh -T
URL形式https://github.com/user/repo.gitgit@github.com:user/repo.git
企業環境での制限少ないある場合がある
学習コスト低い中程度

HTTPSキャッシュ問題の解決方法(参考)

もしHTTPSを継続使用する場合の認証情報クリア方法:

Windows

# 認証情報の確認
cmdkey /list | findstr github

# 認証情報の削除
cmdkey /delete:git:https://github.com

# または認証情報マネージャーから手動削除
# コントロールパネル > 認証情報マネージャー > Windows資格情報

macOS

# キーチェーンから削除
security delete-internet-password -s github.com

Linux

# Git認証情報をクリア
git config --global --unset credential.helper