一臺機器使用不一樣的Git帳號
場景
在平常使用 git
做爲倉庫使用的時候,有時可能會遇到這樣的一些狀況:html
1. 有兩個 `github` 帳號,一臺電腦怎麼同時鏈接這兩個帳號進行維護呢? 2. 本身用一個 `github` 帳號,平時用來更新本身的一些資料;公司使用的 `gitlab`(也是 `git` 的衍生產品)
SSH Key
的配置
1.Windows
下打開 Git Bash
,建立 SSH Key
,按提示輸入密碼,能夠不填密碼一路回車git
$ ssh-keygen -t rsa -C "註冊郵箱"
而後用戶主目錄 /.ssh/
下有兩個文件,id_rsa
是私鑰,id_rsa.pub
是公鑰github
2.獲取 key
,打開 .ssh
下的 id_rsa.pub
文件,裏面的內容就是 key
的內容shell
$ start ~/.ssh/id_rsa.pub
3.登陸 GitHub
,打開SSH Keys
頁面,快捷地址vim
4.測試 ssh key
是否成功,使用命令windows
$ ssh -T git@github.com
若是出現 You’ve successfully authenticated, but GitHub does not provide shell access
。這就表示已成功連上 github
。bash
Gitlab 和 Github 不一樣帳號配置
通常開發用戶應該都配置過一個git的帳號,想在添加一個帳號。服務器
清除 git
的全局設置
使用 git config --list 查看當前配置app
若是你以前在設置本地倉庫和 github
鏈接的時候設置過 user.name
和 user.email
, 那麼你必須首先清楚掉該設置,由於不清楚掉該設置,兩個帳號在提交資料的時候,驗證確定衝突(只能設置一個全局的user.name
和 user.email
,而你如今有兩個帳號就對應兩個不一樣的)。ssh
1.取消global git config --global --unset user.name git config --global --unset user.email 2.設置每一個項目repo的本身的user.email git config user.email "xxxx@xx.com" git config user.name "suzie"
或者直接直接編輯電腦.gitconfig
文件
$ cd ~// 進入根目錄 $ vim .gitconfig // 把 `name` 和 `email` 都去掉
生成另一個帳號新的SSH keys
- 用
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
。
- 執行
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
- 配置
~/.ssh/config
文件
前面咱們在~/.ssh
目錄下面,使用ssh-keygen -C 「your_email」 -t rsa
生成公私祕鑰,當有多個github
帳號的時候,能夠生成多組rsa
的公司密鑰。而後配置~/.ssh/config
文件(若是沒有的話請從新建立一個)。
$ touch config # 建立config文件
而後修改以下:
個人 config
配置以下:
# 該文件用於配置私鑰對應的服務器 # Default github user(609514766@qq.com) Host git@github.com HostName github.com User jawil IdentityFile ~/.ssh/id_rsa_github # gitlab user(yenian.ll@alibaba-inc.com) # 建一個gitlab別名,新建的賬號使用這個別名作克隆和更新 Host git@gitlab.alibaba-inc.com HostName gitlab.alibaba-inc.com User yenian.ll IdentityFile ~/.ssh/id_rsa
若是存在 config
文件的話,其實就是往這個 config
中添加一個 Host
。
同一個電腦 兩個 github 帳號配置
然而事情並無到此結束,裝完逼還想跑那是不行的。小豬往後發現本身是一個念舊的人。他想要同時使用兩個 github
。
那好吧,What a big deal~
這個時候咱們須要先找到 ~/.ssh/config
文件,而後往裏面添加以下配置
Host jawil.github.com HostName github.com IdentityFile ~/.ssh/github_rsa
咱們指定 pig.github.com 這個"做用域"下的ssh鏈接統一指向 github.com
,而且使用以前生成好的 github_rsa
這個密鑰加密。
那麼默認的就是使用 ~/.ssh/id_rsa
這個密鑰加密咯。 而且 HostName
與「做用域」相同。這個就不須要咱們管了。
這個時候咱們測試一下唄。
$ ssh -T git@jawil.github.com Hi jawil! You've successfully authenticated, but GitHub does not provide shell access. $ ssh -T git@github.com Hi yenian! You've successfully authenticated, but GitHub does not provide shell access.
: ) , orz , 這時候還差最後一步,就是修改一下咱們在 jawil
克隆下來的項目的 remote
「做用域」 。
$ git remote rm origin $ git remote add origin git@jawil.github.com:jawil/demo.git // 注意是 `jawil.github.com` 噢?把這個理解爲一個「做用域」吧。 $ git push origin master Everything up-to-date
上述步驟不成功解決方案
- 笨方法:用到哪一個就設置那個的全局參數
git config --global user.name Levi git config --global user.email Levi@email.com
- 注意
# 密鑰文件的命名爲id_isa,改成其餘名字可能會有錯誤 # 參考: I found the solution to the problem in the gitlab README (http://doc.gitlab.com/ce/ssh/README.html) . I used a different filename for my key instead of id_rsa, so the key wasn't working. When I created a config file in my .ssh directory and configured the settings appropriately, "git clone" worked without a hitch.