Skip to main content

在 Git 和 Github 中使用多個帳號

Git 教學現在有獨立的網站了!請移駕 Git 零到一百

在公司專案和個人專案切換時需要兩個不同帳號分開,本文會說明如何設定,內容包含以下:

  1. 建立和管理新的 SSH 帳號
  2. 臨時儲存庫如何手動設定
  3. 使用設定檔自動管理不同儲存庫的設定

會把臨時設定放進來的原因是這樣永遠有備援方案可用,而且也直觀清楚的知道設定了什麼(雖然自動設定也很直觀就是了)。

新增 SSH 金鑰

基本上內容和遠端儲存庫裡面說的一樣只有微幅調整,本段落來自於 Github 官方教學 Generating a new SSH key and adding it to the ssh-agent,保證絕對正確

  1. ssh-keygen -t ed25519 -C "your_email@youremail.com" 建立金鑰
    1. 老電腦不支援 ed25519 就改用 ssh-keygen -t rsa -C "your_email@youremail.com"
    2. 下一步是輸入金鑰位置,建議輸入完整路徑而不是 ~ 縮寫
    3. passphrase 是金鑰額外的密碼
  2. 設定金鑰
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
IdentitiesOnly yes

和教學不一樣的是因為我們有多帳號,所以 Host/User 名稱略有不同

  1. 管理金鑰

使用此指令加入剛才新增的金鑰,要加入才能用:

ssh-add ~/.ssh/id_personal

刪除則使用 ssh add -d ~/.ssh/id_personal, ssh-add -D 刪除全部, ssh-add -l 列出金鑰

  1. 上傳 Github

私鑰放在電腦中永遠不要外流,複製公鑰 (xxx.pub),進入 Github 新帳號的設定頁面,看到左側側邊欄,找到 SSH,點擊進入後新增並且貼上剛才的公鑰。

  1. 測試連線
ssh -T github.com-personal

這時應該要顯示新帳號的名稱才正確。

臨時專案手動設置

克隆專案

請使用 SSH 方式克隆:

git clone git@github.com:用戶名稱/儲存庫名稱.git
危險

Github 連線方式有 HTTPS 和 SSH,如果直接使用網址路徑作為 remote,Git 會使用 global 設定而不是 local 設定!

確保你的 remote 使用 git@github.com... 設定才能正確使用 SSH 傳輸,否則你推不上去。

資訊

網路說 clone 方式 SSH 比 HTTPS 安全完全是胡謅,這裡就不深入解釋,只是導正錯誤觀念。

設定專案

Clone 下來還是會套用 global 設定,所以要用 local config 覆蓋:

git config --local user.name "personal" 
git config --local user.email "personal@gmail.com"

# 設定 remote URL 使用對應的 SSH Host
git remote set-url origin git@<你剛才設定的 SSH Host 名稱>:<Github 用戶名稱>/<Repo 名稱>.git

最後檢查設定

git config --local --list

這樣就完成了。

自動設定所有專案

本段落參考睿楊資訊 Git config includeif

目錄結構

分為個人和工作兩個目錄以方便自動管理設定

~/Code/
├── personal/ # 個人專案
└── work/ # 工作專案

Git includeIf 全域設定

~/.gitconfig 管理全域設定

[user]
name = Your Default Name
email = default@example.com

# 個人專案
[includeIf "gitdir/i:~/Code/personal/"]
path = ~/Code/personal/.gitconfig

# 工作專案
[includeIf "gitdir/i:~/Code/work/"]
path = ~/Code/work/.gitconfig

文檔請見 includeIfgitdir

分別設定兩種專案

個人專案 (~Code/personal/.gitconfig)

[user]
name = personal
email = personal@email.com

工作專案 (~Code/work/.gitconfig)

[user]
name = work
email = work@gmail.com

這樣就完成自動設定的所有步驟了。

疑難排解

驗證配置

# 在任何專案目錄下
git config --show-origin --get user.email
git config --show-origin --get user.name

現有專案修正

# 修正 remote URL 為 SSH
git remote set-url origin git@<你剛才設定的 SSH Host 名稱>:<Github 用戶名稱>/<Repo 名稱>.git

# 確認配置自動套用
git config user.name
git config user.email

# 檢查目前專案設定
git config --local --list

# 確認 remote URL
git remote -v

# 測試 SSH 連線
ssh -T github.com-personal
ssh -T github.com-work