---
# System prepended metadata

title: 我有兩個 Github 帳號我該如何好好設定呢？
tags: [Git, Bash]

---

# 我有兩個 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)
    ![76076](https://hackmd.io/_uploads/B1_jIw0ngl.png)
    ![96674](https://hackmd.io/_uploads/H1L3wwR2gx.png)
    ![34955](https://hackmd.io/_uploads/HJLN_PC2ge.png)

## 步驟二：配置 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~~，記得改成你的名字喔～～**