前些天,寫了篇博客 開發環境之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 git@github.com:用戶名/倉庫名.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 git@github.com
如果出現類似這樣的字段就表明你的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。如果你是在你自己家里的電腦上,就可以是相反的操作了。
