# 我有兩個 Github 帳號我該如何好好設定呢?
> 最近剛上工新工作,公司發了一台 Macbook Pro M4,開心,但新電腦總是要設定的嘛,在公司甚至有另一個 GitHub 帳號,這樣我就痛苦啦,要切來切去的,所以好好設定 GitHub 在電腦是必須的,這邊就來個大補帖~
# 關係圖
前情提要一下:
- 我個人 github 叫作 chungchihhan,個人 github 在 https://github.com
- 我公司 github 叫作 harry_chung,公司是用 GitHub Enterprise 架在自己伺服器,公司 github 在 https://github.mycompany.com (我就不寫出公司名稱,這邊用 mycompany 舉例)
```
💻 MacBook Air M3 (個人專用)
├── [SSH Key & Host 設定]
│ ├── Host 別名:personal
│ ├── HostName:github.com
│ └── IdentityFile:~/.ssh/id_m3_personal
└── [Git 身份設定]
└── 全域設定 (Global):user.name=chungchihhan, user.email=個人信箱
💻 MacBook Pro M4 (個人 & 公司混用)
├── [SSH Keys & Host 設定]
│ ├── Host 別名:personal
│ │ ├── HostName:github.com
│ │ └── IdentityFile:~/.ssh/id_m4_personal (個人 Key)
│ └── Host 別名:work
│ ├── HostName:github.mycompany.com
│ └── IdentityFile:~/.ssh/id_m4_work (公司 Key)
│
└── [Git 身份設定:條件式包含 (includeIf)]
├── ❌ 全域設定 (Global):無 user.name/email (已設定)
├── [條件 1] 路徑:~/Developer/Personal/
│ └── 載入:~/.gitconfig-personal (user.name=chungchihhan, user.email=個人信箱)
└── [條件 2] 路徑:~/Developer/Work/
└── 載入:~/.gitconfig-work (user.name=harry_chung, user.email=公司信箱)
```
# 設定個人電腦(MacBook Air M3)
## 步驟一:生成與上傳 SSH Keys
- 生成 Key
```bash
ssh-keygen -t ed25519 -C "chungchihhan@macbook_air_m3" -f ~/.ssh/id_m3_personal
```
- 複製 Public Key
```bash
pbcopy < ~/.ssh/id_m3_personal.pub
```
- 上傳至個人 GitHub (https://github.com/chungchihhan)



## 步驟二:配置 SSH 設定檔 (~/.ssh/config)
- 創建 `~/.ssh/config`
```
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_m3_personal
```
## 步驟三:SSH 連線測試與 Passphrase 記憶
- 記憶 Passphrase
```bash
ssh-add -K ~/.ssh/id_m3_personal
```
- 連線測試
```bash
ssh -T git@personal
```
- 預期結果
- 顯示 Hi chungchihhan! You've successfully authenticated...
- 注意事項
- 第一次連線需輸入 yes
## 步驟四:設定遠端連線 (git remote add/set-url)
- 這台電腦只會是個人專案 (假設創建了一個 GitHub Repo 叫做 chungchihhan/test-git.git ) 的話,我們現在有一個 `git init` 過的本地資料夾,可以接著打以下指令:
```bash
# 使用別名 personal
git remote set-url origin git@personal:chungchihhan/test-git.git
# 或
git remote add origin git@personal:chungchihhan/test-git.git
```
- 要檢查的話,就打以下指令:
```bash
git remote -v
```
- 最終推送
- 當你執行 git push --set-upstream origin main 時,系統會自動使用 Keychain 儲存的 Passphrase 解鎖你的私鑰,並成功推送,且提交者身份將根據你的專案路徑自動設定完成。
---
# 設定公司電腦(MacBook Pro M4)
## 步驟一:生成與上傳 SSH Keys
- 處理個人的 SSH Keys
- 生成個人 Key
```
ssh-keygen -t ed25519 -C "chungchihhan@macbook_pro_m4" -f ~/.ssh/id_m4_personal
```
- 複製個人 Public Key
```bash
pbcopy < ~/.ssh/id_m4_personal.pub
```
- 上傳至個人 GitHub (https://github.com/chungchihhan)
> [!NOTE]
> 步驟跟設定個人電腦的步驟一的 GitHub 截圖很像
- 處理公司的 SSH Keys
- 生成公司 Key
```
ssh-keygen -t ed25519 -C "harry_chung@mycompany.com_macbook_pro_m4" -f ~/.ssh/id_m4_work
```
- 複製公司 Public Key
```bash
pbcopy < ~/.ssh/id_m4_work.pub
```
- 上傳至公司 GitHub (https://github.mycompany.com/harry_chung)
> [!NOTE]
> 步驟跟設定個人電腦的步驟一的 GitHub 截圖很像
## 步驟二:配置 SSH 設定檔 (~/.ssh/config)
- 創建 `~/.ssh/config`
```
# MacBook Pro M4 - 個人帳號設定
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_m4_personal
# MacBook Pro M4 - 公司帳號設定
Host work
HostName github.mycompany.com
User git
IdentityFile ~/.ssh/id_m4_work
```
## 步驟三:SSH 連線測試與 Passphrase 記憶
- 處理個人 Passphrase 與 SSH 測試
- 記憶個人 Passphrase
```bash
ssh-add -K ~/.ssh/id_m4_personal
```
- 連線測試
```bash
ssh -T git@personal
```
- 預期結果
- 顯示 Hi chungchihhan! You've successfully authenticated...
- 注意事項
- 第一次連線需輸入 yes
- 處理公司 Passphrase 與 SSH 測試
- 記憶公司 Passphrase
```bash
ssh-add -K ~/.ssh/id_m4_work
```
- 連線測試
```bash
ssh -T git@work
```
- 預期結果
- 顯示 Hi harry_chung! You've successfully authenticated...
- 注意事項
- 第一次連線需輸入 yes
## 步驟四:配置 Git 條件式身份 (includeIf)
> [!Important]
> 這部分僅限 Macbook Pro M4 這台公司電腦,因為這台有設定兩個 GitHub 帳號,多配置一個 Git 條件式,可以減少手動切換身份帶來的麻煩,在不同專案目錄下可以自動切換 user.name/email
- 建立獨立身份設定檔 (在 Home 目錄 `~` 下)
- `~/.gitconfig-personal` 檔案內容:
```
[user]
name = chungchihhan
email = 個人信箱
```
- `~/.gitconfig-work` 檔案內容:
```
[user]
name = harry_chung
email = harry_chung@mycompany.com
```
- 配置主設定檔 (`~/.gitconfig`)
- 這邊是我的目錄長相,我在 Developer 資料夾底下有兩個資料夾,分別是 Personal 跟 Work,對應到個人用跟公司用
```
└── Developer
├── Personal
└── Work
```
- 因此,我們的 `.gitconfig` 設定如下:
```
[includeIf "gitdir:~/Developer/Personal/"]
path = ~/.gitconfig-personal
[includeIf "gitdir:~/Developer/Work/"]
path = ~/.gitconfig-work
```
- 測試身份自動切換
- 進入任一個專案目錄後,執行 git init,然後執行 `git config --list --show-origin`。確認正確的 user.name 和 user.email 已經被載入。
## 步驟五:設定遠端連線 (git remote add/set-url)
- 如果是個人專案 (GitHub Repo 假設同樣創建了叫做 chungchihhan/test-git.git 的 repo ) ,跟前面的 MacBook Air M3一樣,假設我們現在有一個 `git init` 過的本地資料夾,可以接著打以下指令:
```bash
# 使用別名 personal
git remote set-url origin git@personal:chungchihhan/test-git.git
# 或
git remote add origin git@personal:chungchihhan/test-git.git
```
- 如果是公司專案的話 (GitHub Repo 假設創建了叫做 harry-chung/test-git.git 的 repo ),假設我們現在有一個 `git init` 過的本地資料夾,可以打以下指令:
```bash
# 使用別名 work
git remote add origin git@work:harry-chung/test-git.git
```
- 兩者要檢查的話,都可以打以下指令:
```bash
git remote -v
```
- 最終推送
- 當你執行 git push --set-upstream origin main 時,系統會自動使用 Keychain 儲存的 Passphrase 解鎖你的私鑰,並成功推送,且提交者身份將根據你的專案路徑自動設定完成。
# 總結
- 以上就是全部啦,連線隔離跟提交隔離都完成啦!
- 您在 `~/.ssh/config` 中為個人和公司創建了 Host 別名 (personal 和 work)。當您使用 `git@personal:...` 或 `git@work:...` 時,SSH 會自動知道該選擇哪一把私鑰 (id_m4_personal 或 id_m4_work) 進行驗證。這完全避開了身份混亂,且透過 `ssh-add -K`,您已經讓 macOS 永遠記住了這些 Key 的密碼,實現了零手動輸入密碼!
- 您設定了 `includeIf` 條件。這讓 Git 會自動檢查您的專案路徑:
- 專案在 `~/Developer/Personal/` 裡? → 提交者自動設為您的 chungchihhan 個人身份。
- 專案在 `~/Developer/Work/` 裡? → 提交者自動設為您的 harry_chung 公司身份。
> [!Warning]
> **最後注意,你的名字不是 ~~chungchihhan~~,也不是 ~~harry_chung~~,記得改成你的名字喔~~**