Article Image
read

當你同時擁有兩個以上的 Git 帳號的時候,是怎麼切換帳號的呢?我曾經很手動的git config + 重新載入SSH Key,後來懶的這樣換來換去乾脆直接開 VM。

Git CLI 並不支援多重帳號,但我們可以透過 SSH 設定來達到多重帳號的功能。以下詳細步驟: (這些設定也適用於其他 Git 服務如 GitLab, BitBucket 等,把 github.com 修改成對應 host 即可)

建立 SSH-KEY

(如果已經有 SSH-KEY 這段可以跳過,只要知道各帳號的 KEY 在哪就好)

假設擁有的帳號名稱分別是 ghWorkghPersonal,對應的 email 為 me@work 以及個人帳號 me@personal

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "me@work"
# 把這個 key 存成 id_rsa_work
$ ssh-keygen -t rsa -C "me@personal"
# 把這個 key 存成 id_rsa_personal

這些指令會在 ~/.ssh 目錄下建立

  • id_rsa_personal
  • id_rsa_personal.pub
  • id_rsa_work
  • id_rsa_work.pub

新增你的 SSH-KEY

(如果已經登陸 SSH-KEY 這段可以跳過)

同個目錄下,複製 public key:

$ pbcopy < ~/.ssh/id_rsa_work.pub

如果你是用 GITHUB:

  • 登入你的帳號
  • Account Settings
  • 點擊 SSH Keys 然後 Add SSH Key
  • 在輸入框內貼入剛剛複製的 KEY 然後點擊 Add Key 即可

重複這些步驟直到所有帳號的 KEY 都已經登錄。

SSH 設定

黑魔法就在這裡,現在我們在 ~/.ssh 目錄底下建立一個名稱為 config 的檔案,內容如下:

# 預設帳號 (個人帳號)
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_personal

# 工作帳號
Host personal
   HostName github.com
   User git
   IdentityFile ~/.ssh/id_rsa_work

# 其他帳號
...

注意這裡我把個人帳號變成預設帳號,這是什麼意思?因為我把 Hostgithub.com 的直接指到個人用的設定(KEY),當然也可以依照個人喜好把預設的換成其他帳號。

更新 SSH 設定

設定檔寫好之後就要更新 ssh agent

$ ssh-add -D
# 清除舊設定

$ ssh-add id_rsa_work
$ ssh-add id_rsa_personal
# 如有其他 key 在這裡繼續加入

$ ssh-add -l
# 看看 key 是不是都加入了

$ ssh -T github.com
Hi ghPersonal! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T work
Hi ghWork! You've successfully authenticated, but GitHub does not provide shell access.
# 測試

新增 GIT REPO

# 工作目錄下
$ mkdir test-personal
$ cd test-personal

$ touch readme.md
# 隨便加個檔案

$ git init
$ git add .
$ git commit -am "first commit"
$ git remote add origin git@github.com:ghPersonal/test-personal.git
$ git push origin master

Push 成功就算大功告成!工作帳號也是類似指令。

注意:這裏假設把東西放在自己的 Repo 下,如果有使用 GIT Organization 的話,git@github.com:ghPersonal/test-personal.git 裡面的 ghPersonal 需要改成 Organization 名稱(或路徑)。

修改既有 REPO

如果有些現存的專案記得也要修改一下,專案的 .git/config 檔案儲存著 git 的設定資訊

[remote "origin"]
    url = git@github.com:ghWork/existing-project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

原本的 config是這樣的,現在我們改成

[remote "origin"]
    url = git@work:ghWork/existing-project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

改動的地方只有一個,把 host (github.com) 改成 work,這樣就可以了。

完成這些設定之後,以後工作帳號就是 work 取代 github.com,而個人帳號不變(因為是預設)。這樣可以節省不少切換帳號的時間,就代表有更多時間可以專注在其他事情上。

HAPPY CODING!

Blog Logo

Fin Chen


Published

Image

Fin's Nest

Things about web develop

Back to Overview