如何在本地管理和切換多個 github 賬號?

思儂發表於2019-04-26

前言

大多數的我們都會遇到這樣一個問題:公司有一個 github 賬戶,這個是專門為工作準備的。而我們自己也有一個自己的私人 github 賬戶,有事沒事做做自己的專案,寫寫自己感興趣的東西。可是,我們怎麼在電腦上把公司 github 切換到自己的私人github 賬號上呢?

我公司內部建議用 smartgit 來精簡 git 的操作,但是,我卻沒辦法在上面切換成自己的賬號,這意味著我必須在自己的電腦上使用自己的私人賬號。oh, 這真是一個煩人的問題。

經過在 google 上查詢資料和不斷地試錯,我終於成功的解決了這個問題。現在,讓我來介紹以下這個是怎麼解決的吧。

本質上,這只是一個平衡 git 和 ssh 配置的問題——實際上這並沒有看上去那麼糟糕。—Michael Herman

操作過程

它的操作包括

  • 建立ssh金鑰
  • 將金鑰新增到 github 賬戶;
  • 建立 config 檔案,管理單獨的 key
  • 更新儲存的 key
  • 測試 git clone 和 git push
  • 怎樣在終端上切換 github 賬號

1. 建立 SSH 金鑰

以我為例,我有兩個 github 賬戶,一個工作用的,使用者名稱是 yuanzhen-kooboo,;另一個是私人的:huangyuanzhen。所以,我要建立兩個金鑰,每個賬號一個:

操作為:

  • 開啟cmd;
  • 依次輸入命令:
    cd ~/.ssh
    ssh-keygen -t rsa -C "1356409766@qq.com"
    ssh-keygen -t rsa -C "3083074260@qq.com"
複製程式碼
  • 當出現 "Enter file in which to save the key" 的提示時,將檔案儲存為 id_rsa_<>。在我的示例中,我將檔案儲存為 ~/.ssh/id_rsa_personal 和 ~/.ssh/id_rsa_company;

效果如圖:

如何在本地管理和切換多個 github 賬號?

找到 C:\Users\huangyuanzhen\.ssh 下,可以看到,生成了下面四個檔案:

  • id_rsa_personal
  • id_rsa_personal.pub
  • id_rsa_company
  • id_rsa_company.pub

2. 將新金鑰繫結到 github 賬號

  • 用記事本開啟 id_rsa_personal.pub 檔案,全選複製;
  • 來到我的私人github賬戶,找到 setting,開啟,點選 "SSH and GPG keys" 選項,可以看到有一個 “add SSH key" 按鈕,將剛才複製的內容貼上到文字區域,同時新增一個相關標題;成功之後是這個樣子的:

如何在本地管理和切換多個 github 賬號?

  • 相對的,在其他賬戶上重複相對應的操作;以我的為例,則是把 id_rsa_company.pub 的內容貼上到我工作賬戶 yuanzhen-kooboo 的 ssh 上;

3. 建立一個配置 config 檔案來管理 key

在 ~/.ssh/ 目錄下建立一個 config 檔案

    echo test>config
複製程式碼

找到這個檔案,並用編輯器開啟(我的是 vscode),然後將下面內容寫入檔案,儲存:

    # huangyuanzhen
    Host personal
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_personal
    
    # yuanzhen-kooboo
    Host company
       HostName github.com
       User git
       IdentityFile ~/.ssh/id_rsa_work
複製程式碼

這裡我們的主機名稱不是 github.com,而是將其命名為 personal 和 company。不同之處在於,我們現在附加了之前建立的新標識檔案: id_rsa_<>;

4. 更新儲存的key

在更新儲存之前,我們要先檢查一下本地的 OpenSSH 服務有沒有開啟。不然會出錯。

開啟 ssh 服務的流程為:

  1. 設定 → 管理可選功能 → 新增功能 → [OpenSSH伺服器]
  2. 計算機管理 → 服務和應用程式 → 服 務→ OpenSSH Authentication Agent&OpenSSH Server → 右擊

啟動之後看到的是這樣子的:

如何在本地管理和切換多個 github 賬號?
開始 SSH 服務之後,我們就可以使用ssh 命令了。

清除當前儲存的認證:

    C:\Users\huangyuanzhen>ssh-add -D
    // All identities removed.
複製程式碼

增加新的keys:

    C:\Users\huangyuanzhen\.ssh>ssh-add id_rsa_company
    Identity added: id_rsa_company (id_rsa_company)
   
    C:\Users\huangyuanzhen\.ssh>ssh-add id_rsa_personal
    Identity added: id_rsa_personal (id_rsa_personal)
複製程式碼

驗證一下! github 是否能識別到這些 keys;在cmd中輸入:

     ssh -T personal
複製程式碼

可以看到 "Hi huangyuanzhen! You've successfully authenticated, but GitHub does not provide shell access." 的提示語。這表明,github 能識別這些 keys 了。Cool !

5. 測試 clone 和 push

測試 git clone

以我的私人賬戶為例,我想把 huangyuanzhen 賬號上的 Look-Thinking 倉庫克隆到本地,然後操作。

在cmd 上輸入:

    git clone git@personal:huangyuanzhen/Look-Thinking.git
複製程式碼

可以看到可以成功把該倉庫克隆過來:

如何在本地管理和切換多個 github 賬號?
如果要操作倉庫,執行命令 "cd Look-Thinking → code . "就可以操作了是不是感覺非常方便?

測試 git push

還是以在我的私人 github 賬號 huangyuanzhen 上操作為例。在 賬號上建立 work-test 倉庫;然後在本地建立 test 資料夾:

    E:\mkdir test
    E:\cd test
    E:\test>echo test>readme.md
複製程式碼

建立好 readme.md 檔案後,將其 push 到 github ;

    git init
    git add .
    git commit -am "first commit"
    git remote add origin git@personal:huangyuanzhen/test.git
    git push -u origin master
複製程式碼

將檔案push成功之後是這樣的:

如何在本地管理和切換多個 github 賬號?

可以在github賬戶上看到在本地對 readme.md的操作結果。git pull 同理。

我們怎樣用命令列切換賬號呢?

如果之前已經用 git remote add 和遠端 倉庫建立過連線,我們需要先清除當前連線,不然會報錯:“fatal: remote origin already exists.”;清除當前連線之後,然後連線新的賬號裡的倉庫,如:

    git remote rm origin
    git remote git add origin git@company:yuanzhen-kooboo/work-test.git
複製程式碼

這裡,我們就斷開了之前和 huangyuanzhen 賬號的連線,然後切換到了 yuanzhen-kooboo 賬號。

這樣配置好之後,不需要再用 smartgit 等一些輔助工具,直接在終端使用命令列操作,我感覺十分方便了呢!動手試試吧。

注意:上面命令列是在windows上操作,如果是在別的作業系統上,直接換成對應的操作命令即可。

資料

相關文章