同一台電腦同時使用兩個 GitHub 帳號

在同一台電腦上使用兩個 GitHub 帳號,最常見的衝突點是 SSH 金鑰Git 設定檔 (user.name / user.email) 以及 憑證快取。我幫你規劃一個清晰的工作模式,並提供工具選擇,讓兩個帳號能乾淨分隔。


🛠️ 工作模式設計

1. 使用不同的 SSH 金鑰

  • 為每個帳號建立獨立的 SSH key pair,例如:
    • ~/.ssh/id_rsa_personal
    • ~/.ssh/id_rsa_work
  • ~/.ssh/config 中設定 Host 別名:
    Host github-personal
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_personal
    Host github-work
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_work
    
  • 使用時,clone repo 時指定 Host:
    git clone git@github-work:company/repo.git
    git clone git@github-personal:username/repo.git
    

2. 區分 Git 使用者設定

  • 全域設定 (~/.gitconfig) 保持預設帳號,例如個人帳號。
  • 專案層級設定 (repo/.git/config) 覆蓋使用者資訊:
    git config user.name "Work User"
    git config user.email "work@example.com"
    
  • 這樣每個專案都能有獨立的身份,不會混淆。

3. 使用 Credential Manager / Token

  • 如果使用 HTTPS 而非 SSH,可以透過 Git Credential Manager (GCM) 管理多組帳號。
  • 建議使用 Personal Access Token (PAT),並在 ~/.git-credentials 或 GCM 中分別儲存。

4. 工具輔助

  • GUI Git 工具(如 Sourcetree, Fork, GitKraken, Tower)通常支援多帳號,並能在專案層級指定憑證。
  • Obsidian + Git 插件:可用來同步筆記,建議在不同 vault 使用不同帳號。
  • 批次腳本 / alias:建立簡單命令快速切換帳號,例如:
    alias git-personal='git config user.name "Personal" && git config user.email "me@personal.com"'
    alias git-work='git config user.name "Work" && git config user.email "me@work.com"'
    

📊 建議工作流表格

面向 個人帳號 工作帳號
SSH 金鑰 id_rsa_personal + github-personal id_rsa_work + github-work
Git 使用者資訊 全域設定 專案層級覆蓋
認證方式 PAT / SSH PAT / SSH
Repo 管理 個人專案資料夾 工作專案資料夾
GUI 工具 Sourcetree / Fork (個人 profile) GitKraken / Tower (工作 profile)

🚀 建議最佳實踐

  1. 檔案夾分隔:個人與工作 repo 放在不同根目錄,避免混淆。
  2. 明確命名:SSH config 中用 github-work / github-personal,一眼就能分辨。
  3. 專案內設定:永遠在 repo 層級設定正確的 user.email,避免 commit 歸錯帳號。
  4. GUI 工具 Profile:如果常用 GUI,建立不同 profile,分別綁定帳號。

batch file,讓你能在同一台電腦快速切換 GitHub 帳號環境

在同一台電腦快速切換 GitHub 帳號環境。這個腳本會同時處理 SSH 金鑰Git 使用者資訊,並且能在不同專案資料夾自動套用正確的帳號。


📝 批次腳本範例 (Windows .bat)

@echo off
REM === GitHub 帳號切換工具 ===
REM 使用方式:
REM   switch-github personal
REM   switch-github work
SETLOCAL
IF "%1"=="" (
    echo 請指定帳號模式:personal 或 work
    EXIT /B 1
)
IF "%1"=="personal" (
    echo 切換到 [個人帳號] 環境...
    REM 設定 Git 使用者資訊
    git config --global user.name "YourPersonalName"
    git config --global user.email "yourpersonal@email.com"
    REM 設定 SSH config alias
    set GIT_SSH_COMMAND=ssh -i %USERPROFILE%\.ssh\id_rsa_personal
)
IF "%1"=="work" (
    echo 切換到 [工作帳號] 環境...
    REM 設定 Git 使用者資訊
    git config --global user.name "YourWorkName"
    git config --global user.email "yourwork@email.com"
    REM 設定 SSH config alias
    set GIT_SSH_COMMAND=ssh -i %USERPROFILE%\.ssh\id_rsa_work
)
echo 完成切換!
ENDLOCAL

🚀 使用方式

  1. 將此檔案存成 switch-github.bat,放在 PATH 可執行的位置。
  2. 在命令列執行:
    switch-github personal
    switch-github work
    
  3. 之後執行 git clonegit push 時,就會自動套用對應的帳號設定。

🔧 延伸優化

  • 專案資料夾自動判斷:可以在腳本中加上判斷目前所在資料夾,若是 C:\Projects\Work 就自動切到工作帳號,若是 C:\Projects\Personal 就切到個人帳號。
  • GUI 工具整合:在 Sourcetree 或 Fork 中,分別建立兩個 Profile,綁定不同的帳號。
  • Linux/macOS:可改用 Shell Script (.sh) 搭配 alias,效果相同。

根據「目前所在的 repo 路徑」自動判斷要用哪個 GitHub 帳號

一個 進階版批次腳本,能根據「目前所在的 repo 路徑」自動判斷要用哪個 GitHub 帳號。這樣你就不用手動切換,走到哪個專案就自動套用正確身份。


📝 進階批次腳本範例 (Windows .bat)

@echo off
REM === GitHub 帳號自動判斷工具 ===
REM 規則:
REM   - C:\Projects\Work\* 使用工作帳號
REM   - C:\Projects\Personal\* 使用個人帳號
SETLOCAL
REM 取得目前所在路徑
SET CURRDIR=%CD%
REM 判斷路徑是否包含 Work
echo 目前路徑:%CURRDIR%
echo.
IF /I "%CURRDIR%"=="%CURRDIR:Work=%" (
    REM 沒有 Work 字樣 → 檢查 Personal
) ELSE (
    echo 偵測到 [工作專案] 路徑,套用工作帳號...
    git config user.name "YourWorkName"
    git config user.email "yourwork@email.com"
    set GIT_SSH_COMMAND=ssh -i %USERPROFILE%\.ssh\id_rsa_work
    goto :done
)
IF /I "%CURRDIR%"=="%CURRDIR:Personal=%" (
    REM 沒有 Personal 字樣 → 預設不處理
) ELSE (
    echo 偵測到 [個人專案] 路徑,套用個人帳號...
    git config user.name "YourPersonalName"
    git config user.email "yourpersonal@email.com"
    set GIT_SSH_COMMAND=ssh -i %USERPROFILE%\.ssh\id_rsa_personal
    goto :done
)
echo 未偵測到專案類型,請確認路徑規則!
goto :end
:done
echo 帳號設定完成!
:end
ENDLOCAL

🚀 使用方式

  1. 將此檔案存成 auto-github.bat,放在 PATH 可執行的位置。
  2. 在專案資料夾中執行:
    auto-github
    
  3. 腳本會自動判斷你目前的路徑,並套用對應的帳號設定。

🔧 延伸優化

  • 多層級判斷:可以擴充成判斷更多路徑,例如 C:\Clients\A → 使用客戶 A 帳號。
  • 環境變數表:把帳號資訊放在一個設定檔 (例如 accounts.env),腳本只要讀取即可,方便維護。
  • 跨平台:在 Linux/macOS 可用 Shell Script 搭配 case 判斷路徑,效果相同。

環境變數設定檔範例,讓帳號資訊集中管理

一個 環境變數設定檔範例,讓帳號資訊集中管理,批次腳本只要讀取這個檔案就能自動套用。這樣維護起來更乾淨、可擴充。


🗂️ accounts.env 範例

# === GitHub 帳號設定檔 ===
# 格式:帳號代號=值
# 個人帳號
PERSONAL_NAME=YourPersonalName
PERSONAL_EMAIL=yourpersonal@email.com
PERSONAL_SSH=%USERPROFILE%\.ssh\id_rsa_personal
# 工作帳號
WORK_NAME=YourWorkName
WORK_EMAIL=yourwork@email.com
WORK_SSH=%USERPROFILE%\.ssh\id_rsa_work

📝 改良版批次腳本 (讀取設定檔)

@echo off
REM === GitHub 帳號自動判斷工具 (讀取 accounts.env) ===
SETLOCAL ENABLEDELAYEDEXPANSION
REM 載入設定檔
FOR /F "tokens=1,2 delims==" %%A IN (accounts.env) DO (
    SET %%A=%%B
)
REM 取得目前所在路徑
SET CURRDIR=%CD%
echo 目前路徑:%CURRDIR%
echo.
REM 判斷路徑
IF /I "%CURRDIR%"=="%CURRDIR:Work=%" (
    REM 沒有 Work → 檢查 Personal
) ELSE (
    echo 偵測到 [工作專案],套用工作帳號...
    git config user.name "%WORK_NAME%"
    git config user.email "%WORK_EMAIL%"
    set GIT_SSH_COMMAND=ssh -i %WORK_SSH%
    goto :done
)
IF /I "%CURRDIR%"=="%CURRDIR:Personal=%" (
    REM 沒有 Personal → 預設不處理
) ELSE (
    echo 偵測到 [個人專案],套用個人帳號...
    git config user.name "%PERSONAL_NAME%"
    git config user.email "%PERSONAL_EMAIL%"
    set GIT_SSH_COMMAND=ssh -i %PERSONAL_SSH%
    goto :done
)
echo 未偵測到專案類型,請確認路徑規則!
goto :end
:done
echo 帳號設定完成!
:end
ENDLOCAL

🚀 使用流程

  1. 建立 accounts.env,集中管理帳號資訊。
  2. 在專案資料夾執行 auto-github.bat,腳本會自動判斷路徑並套用正確帳號。
  3. 若要新增帳號,只需在 accounts.env 增加一組變數,不必改動主腳本。

這樣一來,你就有一個 模組化的帳號管理系統

  • accounts.env → 集中管理帳號資訊
  • auto-github.bat → 自動判斷路徑並套用

Also See

14
1:24 AM - December 07, 2025
1:24 AM - December 07, 2025
1:24 AM - December 07, 2025
1:24 AM - December 07, 2025
1:24 AM - December 07, 2025
1:24 AM - December 07, 2025
1:23 AM - December 07, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025
8:20 PM - December 06, 2025