前言
大多數的我們都會遇到這樣一個問題:公司有一個 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;
效果如圖:
找到 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 檔案
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 服務的流程為:
- 設定 → 管理可選功能 → 新增功能 → [OpenSSH伺服器]
- 計算機管理 → 服務和應用程式 → 服 務→ 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上操作,如果是在別的作業系統上,直接換成對應的操作命令即可。