# 我有兩個 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~~,記得改成你的名字喔~~**