在 Git 和 Github 中使用多個帳號
在公司專案和個人專案切換時需要兩個不同帳號分開,本文會說明如何設定,內容包含以下:
- 建立和管理新的 SSH 帳號
- 臨時儲存庫如何手動設定
- 使用設定檔自動管理不同儲存庫的設定
會把臨時設定放進來的原因是這樣永遠有備援方案可用,而且也直觀清楚的知道設定了什麼(雖然自動設定也很直觀就是了)。
新增 SSH 金鑰
基本上內容和遠端儲存庫裡面說的一樣只有微幅調整,本段落來自於 Github 官方教學 Generating a new SSH key and adding it to the ssh-agent,保證絕對正確
ssh-keygen -t ed25519 -C "your_email@youremail.com"
建立金鑰- 老電腦不支援 ed25519 就改用
ssh-keygen -t rsa -C "your_email@youremail.com"
- 下一步是輸入金鑰位置,建議輸入完整路徑而不是
~
縮寫 - passphrase 是金鑰額外的密碼
- 老電腦不支援 ed25519 就改用
- 設定金鑰
Host github.com-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal
IdentitiesOnly yes
和教學不一樣的是因為我們有多帳號,所以 Host/User 名稱略有不同
- 管理金鑰
使用此指令加入剛才新增的金鑰,要加入才能用:
ssh-add ~/.ssh/id_personal
刪除則使用 ssh add -d ~/.ssh/id_personal
, ssh-add -D
刪除全部, ssh-add -l
列出金鑰
- 上傳 Github
私鑰放在電腦中永遠不要外流,複製公鑰 (xxx.pub
),進入 Github 新帳號的設定頁面,看到左側側邊欄,找到 SSH,點擊進入後新增並且貼上剛才的公鑰。
- 測試連線
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
這樣就完成了。
自動設定所有專案
目錄結構
分為個人和工作兩個目錄以方便自動管理設定
~/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
分別設定兩種專案
個人專案 (~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