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

前言

大多數的咱們都會遇到這樣一個問題:公司有一個 github 帳戶,這個是專門爲工做準備的。而咱們本身也有一個本身的私人 github 帳戶,有事沒事作作本身的項目,寫寫本身感興趣的東西。但是,咱們怎麼在電腦上把公司 github 切換到本身的私人github 帳號上呢?html

我公司內部建議用 smartgit 來精簡 git 的操做,可是,我卻沒辦法在上面切換成本身的帳號,這意味着我必須在本身的電腦上使用本身的私人帳號。oh, 這真是一個煩人的問題。git

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

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

操做過程

它的操做包括windows

  • 建立ssh密鑰
  • 將密鑰添加到 github 帳戶;
  • 建立 config 文件,管理單獨的 key
  • 更新存儲的 key
  • 測試 git clone 和 git push
  • 怎樣在終端上切換 github 帳號

1. 建立 SSH 密鑰

以我爲例,我有兩個 github 帳戶,一個工做用的,用戶名是 yuanzhen-kooboo,;另外一個是私人的:huangyuanzhen。因此,我要建立兩個密鑰,每一個帳號一個:bash

操做爲:服務器

  • 打開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;

效果如圖: ssh

找到 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" 按鈕,將剛纔複製的內容粘貼到文本區域,同時添加一個相關標題;成功以後是這個樣子的:

  • 相對的,在其餘帳戶上重複相對應的操做;以個人爲例,則是把 id_rsa_company.pub 的內容粘貼到我工做帳戶 yuanzhen-kooboo 的 ssh 上;

3. 建立一個配置 config 文件來管理 key

在 ~/.ssh/ 目錄下建立一個 config 文件ide

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 → 右擊

啓動以後看到的是這樣子的:

開始 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
複製代碼

能夠看到能夠成功把該倉庫克隆過來:

若是要操做倉庫,執行命令 "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帳戶上看到在本地對 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上操做,若是是在別的操做系統上,直接換成對應的操做命令便可。

資料

相關文章
相關標籤/搜索