在日常使用git作為倉庫使用的時(shí)候涉波,有時(shí)可能會遇到這樣的一些情況:
1. 有兩個(gè)github賬號,一臺電腦怎么同時(shí)連接這兩個(gè)賬號進(jìn)行維護(hù)呢祟峦?
2. 自己用一個(gè)github賬號罚斗,平時(shí)用來更新自己的一些資料;公司使用的gitlab(也是git的衍生產(chǎn)品)
總結(jié)來說宅楞,就是同一客戶端(即同一臺電腦)可能需要連接多個(gè)git衍生產(chǎn)品賬號(以下簡稱git賬號)针姿。下面就記錄一下我配置的方法,也是網(wǎng)上都可以搜到的厌衙。
首先來說距淫,配置多個(gè)git賬號分為兩種情況:
- 已經(jīng)配置過git賬號,想在添加一個(gè)賬號婶希。
- 沒有配置過任何git賬號榕暇,直接就像配置兩個(gè)賬號
已配置過git賬號
一般開發(fā)用戶應(yīng)該都配置過一個(gè)git的賬號,讓我們先來回顧一下,當(dāng)時(shí)我們是怎樣來配置git賬號的(只有熟悉了配置的過程和原理才能更好地去理解)彤枢。
回顧配置git賬號的過程
配置git本地和遠(yuǎn)程github連接通信的方法狰晚,網(wǎng)上有很多,想了解的同學(xué)可以看一下這里http://www.cnblogs.com/tinyphp/p/5025311.html或者想了解如何生成SSH keys的可以看一下這里http://www.reibang.com/p/31cbbbc5f9fa/
解釋一下:
當(dāng)本地git倉庫和github上的倉庫進(jìn)行通信的時(shí)候缴啡,必須得雙方建立連接才行壁晒,而SSH keys就是兩者建立連接的一把鑰匙,只要鑰匙對了就完成了其中一步驗(yàn)證了业栅。其中我們可以在生成的SSH keys中看到讨衣,里面包含了我們的賬號信息和郵箱信息(后面會用到,先提一下)式镐。
還有一步驗(yàn)證就是用戶名和郵箱的驗(yàn)證反镇,這個(gè)貌似可有可無(具體我也沒搞清楚,反正不設(shè)置的時(shí)候也沒有問題)娘汞,有些連接本地git倉庫和github倉庫的教程中會有下面這樣的設(shè)置:
git config --golbal user.name 'chping2125' //以我的git賬號為例
git config --golbal user.emil 'chping_2125@163.com'
//該郵箱賬號是我的github注冊時(shí)的郵箱
這其實(shí)就是在設(shè)置全局范圍的用戶名和郵箱的設(shè)置歹茶,有時(shí)不設(shè)置這一步,兩者之間進(jìn)行連接會有問題你弦。
設(shè)置多賬號
簡單回顧玩設(shè)置git賬號的步驟和一些注意點(diǎn)惊豺,進(jìn)入今天的主題,設(shè)置多賬號禽作。
清除git的全局設(shè)置
如果你之前在設(shè)置本地倉庫和github連接的時(shí)候設(shè)置過user.name和user.email,那么你必須首先清楚掉該設(shè)置尸昧,因?yàn)椴磺宄粼撛O(shè)置,兩個(gè)賬號在提交資料的時(shí)候旷偿,驗(yàn)證肯定沖突(只能設(shè)置一個(gè)全局的user.name和user.email烹俗,而你現(xiàn)在有兩個(gè)賬號就對應(yīng)兩個(gè)不同的)。
git config --global user.name "your_name"
git config --global user.email "your_email"
就是重新設(shè)置覆蓋了而已萍程。幢妄。。
如果沒有設(shè)置茫负,可以直接跳轉(zhuǎn)第二部蕉鸳。如果你忘了,最好還是覆蓋一下忍法。
生成新站好的SSH keys
前面提到過生成的SSH keys里面包含了賬號和郵箱信息潮尝,所以新賬號必須另外在生成一份SSH keys,當(dāng)然生成的方式和以前一樣饿序。
1. 用ssh-keygen命令生成一組新的id_rsa_new和id_rsa_new.pub
ssh-keygen -t rsa -C "new email"
平時(shí)我們都是直接回車勉失,默認(rèn)生成id_rsa和id_rsa.pub。這里特別需要注意嗤堰,出現(xiàn)提示輸入文件名的時(shí)候(Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_new
)要輸入與默認(rèn)配置不一樣的文件名戴质,比如:我這里填的是 id_rsa_new
注:windows用戶和mac用戶的區(qū)別就是度宦,mac中.ssh
文件夾在根目錄下,所以表示成~/.ssh/
,而windwos用戶是C:\Users\Administrator\.ssh
告匠。
下面同理戈抄,不在贅述。
2. 執(zhí)行ssh-agent讓ssh識別新的私鑰
因?yàn)槟J(rèn)只讀取id_rsa后专,為了讓SSH識別新的私鑰划鸽,需將其添加到SSH agent中:
ssh-add ~/.ssh/id_rsa_work
如果出現(xiàn)Could not open a connection to your authentication agent
的錯(cuò)誤,就試著用以下命令:
ssh-agent bash
ssh-add ~/.ssh/id_rsa_work
3. 配置~/.ssh/config文件
前面我們在~/.ssh目錄下面戚哎,使用ssh-keygen -C “your_email” -t rsa 生成公私秘鑰裸诽,當(dāng)有多個(gè)github賬號的時(shí)候,可以生成多組rsa的公司密鑰型凳。然后配置~/.ssh/config文件(如果沒有的話請重新創(chuàng)建一個(gè))丈冬。
touch config # 創(chuàng)建config文件
然后修改如下:
我的config配置如下:
# 該文件用于配置私鑰對應(yīng)的服務(wù)器
# Default github user(chping_2125@163.com)
Host git@github.com
HostName https://github.com
User git
IdentityFile ~/.ssh/id_rsa
# second user(second@mail.com)
# 建一個(gè)github別名,新建的帳號使用這個(gè)別名做克隆和更新
Host git@code.xxxxxxx.com
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
如果存在config文件的話甘畅,其實(shí)就是往這個(gè)config中添加一個(gè)Host:
#建一個(gè)github別名埂蕊,新建的帳號使用這個(gè)別名做克隆和更新
Host git@code.xxxxxxx.com
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
其規(guī)則就是:從上至下讀取config的內(nèi)容,在每個(gè)Host下尋找對應(yīng)的私鑰疏唾。這里將GitHub SSH倉庫地址中的git@github.com替換成新建的Host別名如:我直接就寫成了git@github.com
蓄氧,那么原地址是:git@github.com:chping2125/test.git,替換后任然是:it@github.com:chping2125/test.git槐脏。
如果你配置的是這樣:
# 該文件用于配置私鑰對應(yīng)的服務(wù)器
# Default github user(chping_2125@163.com)
Host git1 #############不同在這里
HostName https://github.com
User git
IdentityFile ~/.ssh/id_rsa
# second user(second@mail.com)
# 建一個(gè)github別名喉童,新建的帳號使用這個(gè)別名做克隆和更新
Host git2 #############不同在這里
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
那么你原本想在新賬號克隆的命令是
git clone git@xxxxxx.com:chping/test.git
就要相應(yīng)的變成
git clone git2:chping/test.git
4. 添加新的SSH keys到新賬號的SSH設(shè)置中
可不要忘了將新生成的SSH keys添加到你的另一個(gè)github帳號(或者公司的gitlab)下的SSH Key中。
測試一下
$ ssh -T git@github.com
Hi BeginMan! You've successfully authenticated, but GitHub does not provide shell access.
# 上面是github的成功返回語句顿天,下面是gitlab的成功返回語句堂氯。
$ ssh -T git@xxxxxx.com
Welcome to GitLab, chping!
一次性配置兩個(gè)賬號
其實(shí)同理上面,先配置一個(gè)露氮,在配置兩一個(gè)祖灰。
。畔规。。恨统。叁扫。。畜埋。莫绣。。悠鞍。对室。。。掩宜。蔫骂。。牺汤。辽旋。。檐迟。补胚。。追迟。溶其。。敦间。瓶逃。。每瞒。金闽。。剿骨。代芜。。浓利。
參考資料
http://www.cnblogs.com/BeginMan/p/3548139.html
https://my.oschina.net/csensix/blog/184434
http://blog.csdn.net/guang09080908/article/details/46545335