入門學(xué)習(xí)Git的過程中,產(chǎn)生了這樣的困惑:
在電腦上,如果要用Git,我們需要通過命令git config --global user.name "myname"
和git config --global user.email "myname@email.com"
來配置用戶名和email侮措,表明是“誰”在操作Git分扎,來做提交代碼等等一系列操作胧洒。
另外卫漫,如果我們需要使用代碼托管的服務(wù),比如GitHub宏悦,GitHub也會要求我們提供email和用戶名來注冊來注冊包吝,也需要用戶名和email诗越。
再有,如果我們選擇用ssh來訪問GitHub的話(比用https方便块促,https每次都需要輸入用戶名密碼)褂乍,需要產(chǎn)生密鑰對即硼,很多人推薦的產(chǎn)生秘鑰對的方法是用命令ssh-keygen -t rsa -C "myname@email.com"
只酥,又要提供一個email。
這三個地方的email到底什么關(guān)系损离,該怎么設(shè)置呢绝编?下面是我的理解,可能有偏頗祖乳,看官取精華秉氧,去糟粕,不要惡語相向亚斋。
基本前提建設(shè)
1. 個人電腦情況
電腦簡稱 | 說明 |
---|---|
HoPC | 家中使用的臺式電腦帅刊,Mac系統(tǒng) |
CoPC | 公司使用的臺式電腦轰驳,Windows系統(tǒng) |
Book | 自己的筆記本電腦级解,Windows系統(tǒng) |
VM | 開發(fā)用虛擬機(jī),Linux系統(tǒng) |
2. 代碼托管網(wǎng)站賬戶情況
代碼托管網(wǎng)站 | 用戶名 | email地址 | 說明 |
---|---|---|---|
GitHub | personal | personal@126.com | 個人郵箱 |
Gitee | company | company@company.cn | 公司郵箱 |
假定的情況是這樣,需要在4臺電腦(3臺真實物理機(jī)芒划,1臺虛擬機(jī))上做開發(fā)民逼,我們假設(shè)一部分個人的興趣性工作,代碼托管到GitHub笑诅,另一部分是公司的工作,代碼托管到Gitee上疮鲫,現(xiàn)實中可能是公司搭建的私有服務(wù)器吆你,這里用Gitee來假設(shè)。
該如何設(shè)定
1. SSH秘鑰該如何產(chǎn)生和設(shè)定
設(shè)定SSH秘鑰俊犯,一定要理解妇多,SSH密鑰對本質(zhì)上是為了方便,用來替代用戶名口令的認(rèn)證方式的燕侠。從代碼托管網(wǎng)站的角度來說者祖,我們注冊的時候立莉,提供了我們郵箱,用戶名七问,并設(shè)定了密碼,因此代碼托管網(wǎng)站只能通過用戶名口令來認(rèn)證是否真的是我們這個賬戶的擁有者在操作烂瘫。所以,如果用https的方式奇适,就不用產(chǎn)生什么密鑰對了坟比,但是,每次都輸入密碼嚷往,不方便葛账。
SSH方式,本地產(chǎn)生密鑰對皮仁,然后把公鑰加入到代碼托管網(wǎng)站的秘鑰允許列表里面籍琳,把公鑰加入到網(wǎng)站的允許列表這一步是需要密碼授權(quán)的。這樣操作贷祈,網(wǎng)站承認(rèn)這樣一個事實:用這個密鑰對訪問我趋急,等同于提供了密碼。密鑰對保存在某臺機(jī)器上势誊,這樣從這臺機(jī)器上訪問網(wǎng)站就不需要密碼了呜达,因為這臺機(jī)器上能找到秘鑰來替代口令進(jìn)行認(rèn)證。
所以粟耻,很多博客上查近,產(chǎn)生秘鑰對的時候命令是:ssh-keygen -t rsa -C "myname@email.com"
,里面的-C參數(shù)帶的email地址沒有什么實際用處挤忙。從命令本身來說霜威,-C只是給產(chǎn)生的秘鑰對加了一個注釋。用notepad++打開id_rsa.pub册烈,可以看到末尾處戈泼,有這個email地址,方便以后拿到這個密鑰對的時候茄厘,根據(jù)這個可能能回憶起來當(dāng)初產(chǎn)生這個密鑰對是干嘛的矮冬。
結(jié)論1:產(chǎn)生ssh密鑰對時,ssh-keygen -t rsa -C "myname@email.com"
次哈,里面輸入的email與Git設(shè)定的用戶名胎署,與GitHub等代碼托管網(wǎng)站的用戶名毫無關(guān)聯(lián)。
推薦做法是:每臺電腦上產(chǎn)生秘鑰對時窑滞,加注釋信息內(nèi)容主要跟這臺機(jī)器相關(guān)的內(nèi)容琼牧,并且把秘鑰加入到代碼托管網(wǎng)站的列表里面的時候恢筝,用這個跟某臺電腦密切相關(guān)的名稱。以后如果巨坊,不用這臺電腦了撬槽,從網(wǎng)站上刪除這個秘鑰很方便。
電腦簡稱 | 秘鑰對產(chǎn)生注釋 | 代碼托管網(wǎng)站上秘鑰標(biāo)題 |
---|---|---|
HoPC | -C "HoPC" | HoPC |
CoPC | -C "CoPC" | CoPC |
Book | -C "Book" | Book |
VM | -C "VM" | VM |
產(chǎn)生了4個密鑰對趾撵,把這個4個秘鑰對的公鑰侄柔,分別加入到GitHub和Gitee的SSH公鑰列表里面。對于某臺電腦來說占调,只需要一個密鑰對暂题,就能夠訪問多個代碼托管網(wǎng)站了,我們這里究珊,訪問GitHub的時候薪者,秘鑰替代了personal@126.com這個賬戶的的密碼,而訪問Gitee的時候剿涮,就代表的是company@company.cn這個賬戶了言津。
2. git本地用戶名和email如何設(shè)定
這里需要注意的是代碼托管網(wǎng)站對本地設(shè)定的賬戶是如何處理的。代碼托管網(wǎng)站取试,主要看email悬槽,用email地址來匹配自己的賬戶名的郵件地址,如果相同想括,代碼托管網(wǎng)站就認(rèn)為此操作是賬戶所有者的操作陷谱。比如:
如果本地設(shè)定的user.email值是:personal@126.com,由于在GitHub上的賬戶的郵件地址也是personal@126.com瑟蜈,如果從這臺電腦push的話烟逊,GitHub會認(rèn)定這次這個push是賬戶擁有者自己做的,跟直接登錄到GitHub铺根,從網(wǎng)站上修改宪躯,是相同的,修改人是一樣位迂,就是賬戶擁有者访雪。
如果本地設(shè)定的user.email值是:company@company.cn,也能push到GitHub掂林,GitHub會記錄這次的修改是另一個人(用戶名是company)做的臣缀。
另外,還需要注意泻帮,user.name和user.email除了設(shè)定全局值(--gloabl)之外精置,還可以在具體的代碼目錄中設(shè)定自己的user.name和user.email值。
user.name和user.email的設(shè)定策略就是:設(shè)定global值的時候锣杂,考慮一下脂倦,這臺電腦做公司的事多還是自己的事多番宁,比如公司的電腦,明顯做公司的事情多赖阻,在我們這里最好設(shè)定成:user.email = company@company.cn蝶押,user.name = company。當(dāng)我們需要在公司電腦上干點(diǎn)私活的時候火欧,具體的項目目錄中棋电,git config user.name "personal"
,git config user.email "personal@126.com"
,把值改成符合自己要求的苇侵。
總結(jié)
ssh-keygen產(chǎn)生的秘鑰對离陶,每臺電腦有一對就夠了,有些博客指導(dǎo)一臺電腦配置多個密鑰對衅檀,必要性不強(qiáng)。
代碼托管網(wǎng)站上霎俩,推薦用電腦本身相關(guān)信息來做秘鑰對的標(biāo)題哀军。在本地生成ssh密鑰對時也推薦用這個信息來做密鑰對的注釋。
配置本地git用戶名時打却,全局配置(--global)考慮該電腦上的工作主要push到哪個服務(wù)器杉适,配置成跟那個服務(wù)器一致的用戶名和郵件地址最好。
如果出了主要push的服務(wù)器外柳击,這臺電腦上的工作還需要push到其他服務(wù)器猿推,那么在具體的項目目錄下,把用戶名和郵件地址配置成和特定的服務(wù)器相同即可捌肴。