嘮叨幾句
對于大多數(shù)程序員,喜歡將代碼托管到github、gitlab、gitee上。為了避免每次push、pull代碼時都要輸入用戶名和密碼,通常會選擇使用ssh協(xié)議,將公鑰保存到托管網站上。
在實際開發(fā)中,通常要將代碼托管到多個平臺上。如:我們公司的代碼需要托管到gitee上,自己的開源代碼托管到GitHub上等,每個托管平臺都對應一個git賬戶。一般情況下,一臺電腦的Git只對應一個賬戶,只能往一個網站push代碼,很不方便。小主近期與朋友寫開源代碼時,就遇到這種情況,為了在本地使用兩個Git賬號,push、pull代碼,費了老大勁才搞好,這篇文章就介紹如何在一個Git終端中配置多個賬戶,同時管理多個托管網站的代碼。
準備工作
首先,設置Git
的全局配置。首次次安裝Git
時,往往會使用如下的命令配置全局用戶名和郵箱:
git config --global user.name "xxx" # 配置全局用戶名,如Github上注冊的用戶名
git config --global user.email "yyy@mail.com" #配置全局郵箱,如Github上配置的郵箱
--global
選項代表全局,是配置的全局user.name
和user.email
。不同的Git倉庫默認的用戶名和郵箱都是這個值。由于需要管理多個賬戶,所以僅使用這個全局值是不夠的,需要在每個倉庫中單獨配置。
如果已配置過,先重置
git config --global --unset user.name
git config --global --unset user.email
查看賬戶配置
git config --global user.name
git config --global user.email
配置步驟
1. 對每個賬戶生成一對密鑰
首先進入保存秘鑰的目錄,該目錄下保存秘鑰,需要提醒的是這個目錄是默認隱藏的,可以打開Finder
,同事按下command + shift + .
即可顯示全部隱藏文件
cd ~/.ssh //查看秘鑰目錄
然后,根據賬戶郵箱生成秘鑰。如我在gitee上的郵箱是Balopy@163.com
,則命令為:
ssh-keygen -t rsa -C "Balopy@163.com"
生成秘鑰后,會提示:
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/liugui/.ssh/id_rsa):
可以使用
cat ~/.ssh/id_rsa.pub #查看公鑰, id_rsa 沒有pub 后綴的是秘鑰,也叫私鑰
注意:
1. (/Users/liugui/.ssh/id_rsa)
:
冒號后面是讓輸入秘鑰名的;2. 秘鑰默認的文件名是
id_rsa
。為方便區(qū)分,可以自定義名字為id_rsa_Balopy
。3. 接下來的提示都直接進行回車,直到秘鑰生成。
4. 通過
ls
命令,可以看到剛剛生成的密鑰id_rsa_Balopy
和 公鑰id_rsa_Balopy.pub
。同理,對其他賬戶,使用同樣的方法。
2. 私鑰添加到本地
SSH協(xié)議的原理,就是在托管網站上使用公鑰,在本地使用私鑰,這樣本地倉庫就可以和遠程倉庫進行通信。在上一步已經生成了秘鑰文件,接下來需要使用秘鑰文件,首先是在本地使用秘鑰文件:
ssh-add ~/.ssh/id_rsa_github // 將GitHub私鑰添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 將GitLab私鑰添加到本地
為了檢驗本地是否添加成功,可以使用ssh-add -l
命令進行查看
3. 對本地秘鑰進行配置
由于添加了多個密鑰文件,所以需要對這多個密鑰進行管理。在.ssh
目錄下新建一個config文件:
touch config
文件中的內容如下:
#網站的別名,隨意取
Host Balopy
# 托管網站的域名
HostName gitee.com
#指定優(yōu)先使用哪種方式驗證,支持密碼和秘鑰驗證方式
PreferredAuthentications publickey
# 托管網站上的用戶名,最好寫賬戶郵箱,否則容易設置失敗
User lueng@163.com
# 使用的密鑰文件
IdentityFile ~/.ssh/id_rsa_Balopy_gitee
# GitLab的配置相同
Host wang
HostName gitee.com
PreferredAuthentications publickey
User wang@268xue.com
IdentityFile ~/.ssh/id_rsa
如果報以下錯誤,需要檢查一下,用戶名是否是郵箱,或域名是否按要求設置
注意:
Host
是別名,替代的是 gitee.com, 在push/pull代碼是,切記格式:
git@gitee.com:balopy/Demo_Swift_2.0.git // 原倉庫地址
git@Balopy:Balopy/Demo_Swift_2.0.git // 使用時用別名
git clone Balopy:balopy/Demo_Swift_2.0.git //如clone 時用別名
4. 公鑰添加到托管網站
以GitHub為例,先在本地復制公鑰。進入.ssh
目錄,使用vim id_rsa_github.pub
查看生成的GitHub公鑰,全選進行復制。
登錄GitHub,點擊右上角頭像選擇設置
,在打開的頁面中選擇SSH公鑰
托管網站的公鑰添加完成。每個托管平臺分別生成一對密鑰,分別添加到本地和托管網站。
這時候,可以測試一下配置是否成功,測試命令使用別名。例如,對于GitHub,本來應該使用的測試命令是:
ssh -T gitee.com // 單賬號使用原域名,
ssh -T Balopy // 多賬號測試時使用別名
如何使用
使用有兩種情況,一種情況是從遠端拉取代碼到本地,一種是本地已有倉庫需要與遠程倉庫關聯(lián)。
1.如果是從遠端拉取代碼
選擇SSH協(xié)議的復制命令,如對于GitLab上代碼庫test,其復制命令為
git clone git@gitee.com:Balopy/test.git
由于使用了別名gitlab,所以實際使用的復制命令應當為:
git clone Balopy:Balopy/test.git
這種方法較為簡單,修改后的代碼無需額外配置,可以直接push/pull
2. 如果是本地已有的倉庫
如果本地已有倉庫,需要與遠端進行關聯(lián),進入本地倉庫文件夾,單獨配置該倉庫的用戶名和郵箱
git config user.name "Balopy"
git config user.email "Balopy@163.com"
然后,進入本地倉庫的git目錄,打開config文件
cd .git // 如果是新建文件夾需要先執(zhí)行git init
vim config //新建config 文件
在config文件中,修改(config文件中已有remote "origin"信息)或者添加(config文件中不包含remote "origin"信息)分支信息:
[remote "origin"]
url = git@Balopy:Balopy/test.git //域名使用別名,原git@gitee.com
fetch = +refs/heads/*:refs/remotes/origin/*
如果使用原域名會報錯,因為config 設置了別名
使用別名
clone
總結一下吧,多賬號使用倉庫,關鍵是要配置好用戶名和郵箱,及使用別名。使用別名的目的是為了通過別名,將本地倉庫與密鑰目錄
.ssh
文件夾下的密鑰進行管理,這樣本地倉庫使用的私鑰與托管網站使用的公鑰的配對,而用戶名和郵箱是該倉庫使用SSH協(xié)議時需要用到的信息。參考博文:https://juejin.im/post/5d1ebab8f265da1bd2610b6b
完事兒,些處應有掌聲_