同一臺電腦上個人的github賬戶如何與公司的gitlab賬戶共存
前些天,寫了篇部落格開發環境之git:團隊協作git工作流與常用命令 。
主要是回顧其中的第一小節基本配置。
但是對於很多程式設計師而言,我們不僅有公司的gitlab賬戶做公司的業務,也會有自己個人的github賬戶整理自己的學習程式碼,如何在同一臺電腦上讓這兩個賬戶共存?
一. 先來看看你可能想到的方式:
1.1 直接把之前生成的 ~/.ssh/id_rsa.pub 檔案用類似的方式新增到github網站上。
右上角點選頭像 --> 點選settings --> 點選 SSH and GPG keys --> 點選 New SSH key --> 貼上 id_rsa.pub
當你發現你用ssh的方式拉取github倉庫的時候
git clone [email protected]:使用者名稱/倉庫名.git
會提示
Cloning into '倉庫名'... ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
想想也是,仔細看id_rsa.pub檔案 後面跟的是公司郵箱的地址,而你的github賬戶是你自己私人郵箱的地址,兩個伺服器明顯都不在一起,鑑權和驗證都是分開的。這種方式是不行的。
1.2. 不管了,那直接用https的方式總可以吧,可以是可以,但是https的弊端大部分人也都清楚,每次推送程式碼都需要輸入你的github賬戶名和密碼了,這樣很煩
1.3. 重新設定下
git config --global user.name "github使用者名稱" git config --global user.email "github郵箱"
這樣貌似可行?(沒親自試過),但有可能正在自己的github專案中練手,突然公司專案來了個新bug,你就又要重新設定成公司的使用者名稱郵箱什麼的,經常需要這樣來回切就有點煩
二、一勞永逸的方式
之前公司的gitlab賬戶的ssh key 是正常的,那就先不管他了,其實我們要做的就只是再去生成一個新的ssh key 新增到 github賬戶上而已。
2.1. 生成一個github的ssh key
ssh-keygen -t rsa -C "你的github郵箱" -f ~/.ssh/github_rsa
2.2. 輸入上面的命令後一路回車,然後到 ~/.ssh 目錄下去找,會發現多了兩個檔案 github_rsa 和 github_rsa.pub。 把github_rsa.pub 按照 1.1 的方式新增到github中去
2.3 在~/.ssh/目錄下建立一個config檔案,分別配置公司gitlab的ssh key 和 自己個人的 ssh key
Host gitlab HostName 公司的程式碼倉庫伺服器地址 User gitlab使用者名稱 IdentityFile ~/.ssh/id_rsa Host github.com HostName github.com User github使用者名稱 IdentityFile ~/.ssh/github_rsa
其實這裡的User並不會有我們預期的效果,比如你在公司的gitlab使用者名稱一般會取實名的名字,而github是一個隨意的暱稱。這裡並不會讓你以後推送程式碼到gitlab時取 你在這裡配置的 gitlab使用者名稱,同樣也不會推送到github時取你在這裡配置的 github使用者名稱。因為這個其實只是針對ssh key的配置的User,並不會影響你之前通過 git config --global user.name "公司gitlab使用者名稱" 設定的git賬戶名
2.4 至此,可以分別測試一下了你的ssh 是否能連通了
ssh -T git@gitlab ssh -T [email protected]
如果出現類似這樣的欄位就表明你的ssh key可以用了
Hi XXX! You've successfully authenticated, but GitHub does not provide shell access.
2.5 強迫症的福音
前面2.3中提到 ~/.ssh/config 檔案中的User 並不等同於我們的git賬戶名。
有可能你之前設定過
git config --global user.name "公司gitlab實名"
然後你發現你傳程式碼到github的時候,也是顯示的這個實名,讓你覺得有點不爽。
你可以繼續到你本地的github倉庫專案資料夾下去設定一個本地的使用者名稱
git config --local user.name "github使用者名稱"
再推送,就可以顯示對應的使用者名稱了。
這裡什麼時候用global 什麼時候用local 其實取決於你自己用哪個賬戶用得多一點,比如你在公司的電腦上,你就可以把公司的gitlab使用者名稱加 --global 配置,而自己個人的github加 --local。如果你是在你自己家裡的電腦上,就可以是相反的操作了。