在日常使用git作為倉庫使用的時候,有時可能會遇到這樣的一些情況:
1. 有兩個github賬號,一臺電腦怎么同時連接這兩個賬號進行維護呢?
2. 自己用一個github賬號,平時用來更新自己的一些資料;公司使用的gitlab(也是git的衍生產品)
總結來說,就是同一客戶端(即同一臺電腦)可能需要連接多個git衍生產品賬號(以下簡稱git賬號)。下面就記錄一下我配置的方法,也是網上都可以搜到的。
首先來說,配置多個git賬號分為兩種情況:
- 已經配置過git賬號,想在添加一個賬號。
- 沒有配置過任何git賬號,直接就像配置兩個賬號
已配置過git賬號
一般開發用戶應該都配置過一個git的賬號,讓我們先來回顧一下,當時我們是怎樣來配置git賬號的(只有熟悉了配置的過程和原理才能更好地去理解)。
回顧配置git賬號的過程
配置git本地和遠程github連接通信的方法,網上有很多,想了解的同學可以看一下這里http://www.cnblogs.com/tinyphp/p/5025311.html或者想了解如何生成SSH keys的可以看一下這里http://www.lxweimin.com/p/31cbbbc5f9fa/
解釋一下:
當本地git倉庫和github上的倉庫進行通信的時候,必須得雙方建立連接才行,而SSH keys就是兩者建立連接的一把鑰匙,只要鑰匙對了就完成了其中一步驗證了。其中我們可以在生成的SSH keys中看到,里面包含了我們的賬號信息和郵箱信息(后面會用到,先提一下)。
還有一步驗證就是用戶名和郵箱的驗證,這個貌似可有可無(具體我也沒搞清楚,反正不設置的時候也沒有問題),有些連接本地git倉庫和github倉庫的教程中會有下面這樣的設置:
git config --golbal user.name 'chping2125' //以我的git賬號為例
git config --golbal user.emil 'chping_2125@163.com'
//該郵箱賬號是我的github注冊時的郵箱
這其實就是在設置全局范圍的用戶名和郵箱的設置,有時不設置這一步,兩者之間進行連接會有問題。
設置多賬號
簡單回顧玩設置git賬號的步驟和一些注意點,進入今天的主題,設置多賬號。
清除git的全局設置
如果你之前在設置本地倉庫和github連接的時候設置過user.name和user.email,那么你必須首先清楚掉該設置,因為不清楚掉該設置,兩個賬號在提交資料的時候,驗證肯定沖突(只能設置一個全局的user.name和user.email,而你現在有兩個賬號就對應兩個不同的)。
git config --global user.name "your_name"
git config --global user.email "your_email"
就是重新設置覆蓋了而已。。。
如果沒有設置,可以直接跳轉第二部。如果你忘了,最好還是覆蓋一下。
生成新站好的SSH keys
前面提到過生成的SSH keys里面包含了賬號和郵箱信息,所以新賬號必須另外在生成一份SSH keys,當然生成的方式和以前一樣。
1. 用ssh-keygen命令生成一組新的id_rsa_new和id_rsa_new.pub
ssh-keygen -t rsa -C "new email"
平時我們都是直接回車,默認生成id_rsa和id_rsa.pub。這里特別需要注意,出現提示輸入文件名的時候(Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_new
)要輸入與默認配置不一樣的文件名,比如:我這里填的是 id_rsa_new
注:windows用戶和mac用戶的區別就是,mac中.ssh
文件夾在根目錄下,所以表示成~/.ssh/
,而windwos用戶是C:\Users\Administrator\.ssh
。
下面同理,不在贅述。
2. 執行ssh-agent讓ssh識別新的私鑰
因為默認只讀取id_rsa,為了讓SSH識別新的私鑰,需將其添加到SSH agent中:
ssh-add ~/.ssh/id_rsa_work
如果出現Could not open a connection to your authentication agent
的錯誤,就試著用以下命令:
ssh-agent bash
ssh-add ~/.ssh/id_rsa_work
3. 配置~/.ssh/config文件
前面我們在~/.ssh目錄下面,使用ssh-keygen -C “your_email” -t rsa 生成公私秘鑰,當有多個github賬號的時候,可以生成多組rsa的公司密鑰。然后配置~/.ssh/config文件(如果沒有的話請重新創建一個)。
touch config # 創建config文件
然后修改如下:
我的config配置如下:
# 該文件用于配置私鑰對應的服務器
# 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)
# 建一個github別名,新建的帳號使用這個別名做克隆和更新
Host git@code.xxxxxxx.com
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
如果存在config文件的話,其實就是往這個config中添加一個Host:
#建一個github別名,新建的帳號使用這個別名做克隆和更新
Host git@code.xxxxxxx.com
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
其規則就是:從上至下讀取config的內容,在每個Host下尋找對應的私鑰。這里將GitHub SSH倉庫地址中的git@github.com替換成新建的Host別名如:我直接就寫成了git@github.com
,那么原地址是:git@github.com:chping2125/test.git,替換后任然是:it@github.com:chping2125/test.git。
如果你配置的是這樣:
# 該文件用于配置私鑰對應的服務器
# Default github user(chping_2125@163.com)
Host git1 #############不同在這里
HostName https://github.com
User git
IdentityFile ~/.ssh/id_rsa
# second user(second@mail.com)
# 建一個github別名,新建的帳號使用這個別名做克隆和更新
Host git2 #############不同在這里
HostName https://code.xxxxxxx.com #公司的gitlab
User git
IdentityFile ~/.ssh/id_rsa_new
那么你原本想在新賬號克隆的命令是
git clone git@xxxxxx.com:chping/test.git
就要相應的變成
git clone git2:chping/test.git
4. 添加新的SSH keys到新賬號的SSH設置中
可不要忘了將新生成的SSH keys添加到你的另一個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!
一次性配置兩個賬號
其實同理上面,先配置一個,在配置兩一個。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
參考資料
http://www.cnblogs.com/BeginMan/p/3548139.html
https://my.oschina.net/csensix/blog/184434
http://blog.csdn.net/guang09080908/article/details/46545335