如何在一臺(tái)電腦上使用多個(gè)git帳號(hào)?
我被這個(gè)問(wèn)題,困擾了許久,今天終于搞成功了,必須總結(jié)一下。
謝謝廖雪峰老師的git教程,讓我學(xué)會(huì)了git如何使用。但是當(dāng)時(shí)是這樣配置的
$ git config --global user.name "username"
$ git config --global user.email "email@example.com"
請(qǐng)注意里邊的 global 參數(shù),這是全局配置,你在電腦里任何一個(gè)地方使用git都會(huì)默認(rèn)使用這個(gè)賬戶(hù)。
然而問(wèn)題來(lái)了,我要在一臺(tái)電腦上使用多個(gè)帳號(hào)呢,公司一個(gè)帳號(hào),自己一個(gè)帳號(hào),或是 github 一個(gè) ,oschina 一個(gè)怎么辦呢?
首先你要忍痛把全局設(shè)置取消掉,而且每次創(chuàng)建新倉(cāng)庫(kù)都要設(shè)置這個(gè)倉(cāng)庫(kù)的用戶(hù)。
如下代碼所示:取消全局設(shè)置
$ git config --global --unset user.name
$ git config --global --unset user.email
設(shè)置倉(cāng)庫(kù)對(duì)應(yīng)的用戶(hù)
$ git config user.name "example"
$ git config user.email "example@gmail.com"
以上是針對(duì)的是原來(lái)已經(jīng)配置好的賬戶(hù),如此設(shè)置之后就可以按照正常的流程提交代碼了。
添加新賬戶(hù)
1. 生成新的ssh-key
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa_2 -C "email@example.com"
email@example.com這里是你新賬戶(hù)的郵箱。
請(qǐng)注意** id_rsa_2**是生成新key的名字,可以自己命名,但不能和原來(lái)的ssh-key一樣。
2. 添加到 ssh-agent 信任列表
$ ssh-add ~/.ssh/id_rsa_2
請(qǐng)注意:此處有坑,你可能會(huì)遇到這樣的問(wèn)題
Could not open a connection to your authentication agent.
解決方案:(也可以是其他的,參考資料里邊stackoverflow里邊的答案你都可以試試)
$ ssh-agent bash
這之后,再添加。看到如下所示的情況,就證明添加成功了
$ ssh-add ~/.ssh/id_rsa_2
Identity added: /c/Users/dong/.ssh/id_rsa_2 (/c/Users/dong/.ssh/id_rsa_2)
參考資料:
http://www.cnblogs.com/sheldonxu/archive/2012/09/17/2688281.html
http://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent
3. 添加ssh-key到github
詳見(jiàn):https://help.github.com/articles/connecting-to-github-with-ssh/
4.在config文件配置多個(gè) ssh-key
找到你的.ssh文件夾,打開(kāi)config文件;如果沒(méi)有config自己建一個(gè),不要設(shè)置后綴名。
配置如下:
Host github.com
User taosang1992
Hostname github.com
IdentityFile C:\Users\dong\.ssh\id_rsa
Host username.github.com
User username
Hostname github.com
IdentityFile C:\Users\dong\.ssh\id_rsa_2
根據(jù)你自己的情況配,你的用戶(hù)名是什么,就把username改成什么。
5.為每個(gè)倉(cāng)庫(kù)單獨(dú)設(shè)置用戶(hù):
$ git config user.name "username"
$ git config user.email "email@example.com"
自此,你就可以按照git的正常工作流程干活了。