Well in Time
如何在一台電腦上輕易切換不同的 git account 與 ssh key
05-04-20233 Min Read

May the force be with you.

Baby yoda

gif credits

前言

一直以來都有需要在同台電腦上切換不同 git 帳號的需求,試過一些工具都不甚理想,最後繞了一圈發現還是透過簡單的 shell script 跟 git config 設定最簡單,然而即便步驟真的很少,似乎也到了事情不記下來很容易就會忘記的階段了...(不是年齡增長只是事情越來越多 LOL)

今天這篇文章算是一個小筆記,讓自己之後換電腦時能記得該怎麼設定。P.S. 這只是我自己覺得方便的設定,有需要的讀者可以自行修改成自己喜歡的形狀。

設定 ssh keys

要能 access 你的 GitHub repo,最方便的做法就是產生 ssh keys 然後綁定到 GitHub 上,接著註冊到 ssh-agent 上。

這部分建議直接參考 GitHub 官方文件,上面除了有 GitHub 的最新資訊外,也會額外提供作業系統版本不同時,在指令上的一些差異(像是 macOS Sierra 、 Monterey 與之前版本都有些許不同)。

當你為你的個別 git account 產生 ssh key 並設定到 GitHub 上後,基本上要透過以下指令來將 key 註冊至 ssh-agent 上:

ssh-add ~/.ssh/my_git_a

Note: 如果你的 key 有設定 passphrase,可以加入 --apple-use-keychain 之類的參數,讓 ssh-agent 從你的 keychain 中抓密碼。(前提是你要有存在 Keychain 中。)

你也能設定 ~/.ssh/config 讓系統自動載入你的 key,但由於接下來切換帳號的 script 中,我是直接用 ssh-add 來主動設定 ssh-agent 上綁定的 key,config 這部分我就沒有設定了。

撰寫簡單的 script

接著就是主要的設置。

在你的 .zshrc 或其他 shell script rc file 中,新增下列兩個 functions:

function gitA() {
  git config --global user.name "UserName_for_gitA"
  git config --global user.email "Email_for_gitA"
  ssh-add -D
  ssh-add ~/.ssh/my_git_a
}

function gitB() {
  git config --global user.name "UserName_for_gitB"
  git config --global user.email "Email_for_giB"
  ssh-add -D
  ssh-add ~/.ssh/my_git_b
}

Function 內基本上就做三件事:

  1. 設定全域的 git config 變數,讓你切換成 git A 時,user name 與 user email 會是 git A 的。
  2. ssh-add -D 會刪除所以目前 attached 到 ssh-agent 上的 key
  3. 最後加入指定的 git account key

這樣設置好後,你就能在 terminal 中直接以 gitAgitB 的指令來切換兩個 git account。

如果你怕不清楚自己現在是在哪個 git account 底下,也可以另外加上一個 Function:

function gitwho() {
    git config user.name
}

或是修改你 terminal 的 prompt,像是:

export PROMPT="
%F{green}[%~]%f <`git config user.name`>
=> %# "
RPROMPT='%*'

結論

這樣的設定是目前最符合我需求且最快速的方式,他當然有一些明顯的缺點,像是每次切換都會刪掉所有 ssh-agent 的 entries,然後再重新加入,且一次只能有一個 key attach 在 ssh-agent 中等等。這部分理論上可以用 .ssh/config 來處理,但這樣一來,每次 clone repo 的時候就得注意 host 是不是跟 config 設定的一樣,我覺得有點麻煩 😅

找到最適合自己的做法才能真正改善效率,這篇文章除了作為給自己的筆記外,希望也能帶給看到的讀者一點幫助,如果有更好的設置方式也歡迎留言分享!

資料來源

  1. How to manage multiple GitHub accounts on a single machine with SSH keys
  2. 複数のGitHubアカウントを使い分けたい時の設定方法とTips
© by Arvin Huang. All rights reserved.
theme inspired by @mhadaily
Last build: 05-05-2023