在日常使用git作為倉(cāng)庫(kù)使用的時(shí)候,有時(shí)可能會(huì)遇到這樣的一些情況:
1. 有兩個(gè)github賬號(hào),一臺(tái)電腦怎么同時(shí)連接這兩個(gè)賬號(hào)進(jìn)行維護(hù)呢?
2. 自己用一個(gè)github賬號(hào),平時(shí)用來(lái)更新自己的一些資料;公司使用的gitlab(也是git的衍生產(chǎn)品)
總結(jié)來(lái)說(shuō),就是同一客戶端(即同一臺(tái)電腦)可能需要連接多個(gè)git衍生產(chǎn)品賬號(hào)(以下簡(jiǎn)稱git賬號(hào))。下面就記錄一下我配置的方法,也是網(wǎng)上都可以搜到的。
首先來(lái)說(shuō),配置多個(gè)git賬號(hào)分為兩種情況:
- 已經(jīng)配置過(guò)git賬號(hào),想在添加一個(gè)賬號(hào)。
- 沒(méi)有配置過(guò)任何git賬號(hào),直接就像配置兩個(gè)賬號(hào)
已配置過(guò)git賬號(hào)
一般開(kāi)發(fā)用戶應(yīng)該都配置過(guò)一個(gè)git的賬號(hào),讓我們先來(lái)回顧一下,當(dāng)時(shí)我們是怎樣來(lái)配置git賬號(hào)的(只有熟悉了配置的過(guò)程和原理才能更好地去理解)。
回顧配置git賬號(hào)的過(guò)程
配置git本地和遠(yuǎn)程github連接通信的方法,網(wǎng)上有很多,想了解的同學(xué)可以看一下這里http://www.cnblogs.com/tinyphp/p/5025311.html或者想了解如何生成SSH keys的可以看一下這里http://www.lxweimin.com/p/31cbbbc5f9fa/
解釋一下:
當(dāng)本地git倉(cāng)庫(kù)和github上的倉(cāng)庫(kù)進(jìn)行通信的時(shí)候,必須得雙方建立連接才行,而SSH keys就是兩者建立連接的一把鑰匙,只要鑰匙對(duì)了就完成了其中一步驗(yàn)證了。其中我們可以在生成的SSH keys中看到,里面包含了我們的賬號(hào)信息和郵箱信息(后面會(huì)用到,先提一下)。
還有一步驗(yàn)證就是用戶名和郵箱的驗(yàn)證,這個(gè)貌似可有可無(wú)(具體我也沒(méi)搞清楚,反正不設(shè)置的時(shí)候也沒(méi)有問(wèn)題),有些連接本地git倉(cāng)庫(kù)和github倉(cāng)庫(kù)的教程中會(huì)有下面這樣的設(shè)置:
git config --golbal user.name 'chping2125' //以我的git賬號(hào)為例
git config --golbal user.emil 'chping_2125@163.com'
//該郵箱賬號(hào)是我的github注冊(cè)時(shí)的郵箱
這其實(shí)就是在設(shè)置全局范圍的用戶名和郵箱的設(shè)置,有時(shí)不設(shè)置這一步,兩者之間進(jìn)行連接會(huì)有問(wèn)題。
設(shè)置多賬號(hào)
簡(jiǎn)單回顧玩設(shè)置git賬號(hào)的步驟和一些注意點(diǎn),進(jìn)入今天的主題,設(shè)置多賬號(hào)。
清除git的全局設(shè)置
如果你之前在設(shè)置本地倉(cāng)庫(kù)和github連接的時(shí)候設(shè)置過(guò)user.name和user.email,那么你必須首先清楚掉該設(shè)置,因?yàn)椴磺宄粼撛O(shè)置,兩個(gè)賬號(hào)在提交資料的時(shí)候,驗(yàn)證肯定沖突(只能設(shè)置一個(gè)全局的user.name和user.email,而你現(xiàn)在有兩個(gè)賬號(hào)就對(duì)應(yīng)兩個(gè)不同的)。
git config --global user.name "your_name"
git config --global user.email "your_email"
就是重新設(shè)置覆蓋了而已。。。
如果沒(méi)有設(shè)置,可以直接跳轉(zhuǎn)第二部。如果你忘了,最好還是覆蓋一下。
生成新站好的SSH keys
前面提到過(guò)生成的SSH keys里面包含了賬號(hào)和郵箱信息,所以新賬號(hào)必須另外在生成一份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識(shí)別新的私鑰
因?yàn)槟J(rèn)只讀取id_rsa,為了讓SSH識(shí)別新的私鑰,需將其添加到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文件
前面我們?cè)趡/.ssh目錄下面,使用ssh-keygen -C “your_email” -t rsa 生成公私秘鑰,當(dāng)有多個(gè)github賬號(hào)的時(shí)候,可以生成多組rsa的公司密鑰。然后配置~/.ssh/config文件(如果沒(méi)有的話請(qǐng)重新創(chuàng)建一個(gè))。
touch config # 創(chuàng)建config文件
然后修改如下:
我的config配置如下:
# 該文件用于配置私鑰對(duì)應(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別名,新建的帳號(hào)使用這個(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別名,新建的帳號(hào)使用這個(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下尋找對(duì)應(yīng)的私鑰。這里將GitHub SSH倉(cāng)庫(kù)地址中的git@github.com替換成新建的Host別名如:我直接就寫(xiě)成了git@github.com
,那么原地址是:git@github.com:chping2125/test.git,替換后任然是:it@github.com:chping2125/test.git。
如果你配置的是這樣:
# 該文件用于配置私鑰對(duì)應(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別名,新建的帳號(hào)使用這個(gè)別名做克隆和更新
Host git2 #############不同在這里
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
那么你原本想在新賬號(hào)克隆的命令是
git clone git@xxxxxx.com:chping/test.git
就要相應(yīng)的變成
git clone git2:chping/test.git
4. 添加新的SSH keys到新賬號(hào)的SSH設(shè)置中
可不要忘了將新生成的SSH keys添加到你的另一個(gè)github帳號(hào)(或者公司的gitlab)下的SSH Key中。
測(cè)試一下
$ ssh -T git@github.com
Hi BeginMan! You've successfully authenticated, but GitHub does not provide shell access.
# 上面是github的成功返回語(yǔ)句,下面是gitlab的成功返回語(yǔ)句。
$ ssh -T git@xxxxxx.com
Welcome to GitLab, chping!
一次性配置兩個(gè)賬號(hào)
其實(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