git連線多個遠端倉庫

孤獨和美酒發表於2017-10-30

問題描述

有時候我們需要在同一臺電腦上連線多個遠端倉庫,比如連線兩個GitHub賬號,那麼需要兩個條件。
1.生成兩對 私鑰/公鑰,並且金鑰檔案命名不能重複。
2.push 到remote時區分兩個賬戶,推送到相應的倉庫。

相應配置

1.在MAC的終端中輸入以下命令,檢視金鑰。

ls ~/.ssh
如果有 id_rsa 和 id_rsa.pub,說明已存在一對金鑰/公鑰。

2.建立新的 金鑰/公鑰,並指定金鑰名稱,比如id_rsa_x(x為任意名稱)

ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C “yourmail@xxx.com”
操作完成後,該目錄會多出 id_rsa_x 和 id_rsa_x.pub 兩個檔案。

3.在 ~/.ssh/ 資料夾下建立一個 config 檔案

$ touch config
$ vim config
編輯config檔案,配置不同的倉庫指向不同的金鑰檔案。

第一個賬號,預設使用的賬號

Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

第二個賬號

Host second.github.com # second為字首名,可以任意設定
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x
原理分析
1.ssh 客戶端是通過類似 git@github.com:githubUserName/repName.git 的地址來識別使用本地的哪個私鑰的,地址中的 User 是@前面的git, Host 是@後面的github.com。
2.如果所有賬號的 User 和 Host 都為 git 和 github.com,那麼就只能使用一個私鑰。所以要對User 和 Host 進行配置,讓每個賬號使用自己的 Host,每個 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com。
3.配置了別名之後,新的地址就是git@second.github.com:githubUserName/repName.git(在新增遠端倉庫時使用)。
這樣 ssh 在連線時就可以區別不同的賬號了。
4.檢視SSH 金鑰的值,分別新增到對應的 GitHub 賬戶中

$ cat id_rsa.pub
$ cat id_rsa_x.pub
把這兩個值分別 copy 到 GitHub 賬號中的 SSH keys 中儲存。

5.清空本地的 SSH 快取,新增新的 SSH 金鑰 到 SSH agent中

$ ssh-add -D
$ ssh-add id_rsa
$ ssh-add id_rsa_x
最後確認一下新金鑰已經新增成功

$ ssh-add -l
6.測試 ssh 連結

ssh -T git@github.com
ssh -T git@second.github.com

xxx! You’ve successfully authenticated, but GitHub does not provide bash access.

出現上述提示,連線成功

7.取消 git 全域性使用者名稱/郵箱的設定,設定獨立的 使用者名稱/郵箱

取消全域性 使用者名稱/郵箱 配置

$ git config –global –unset user.name
$ git config –global –unset user.email

進入專案資料夾,單獨設定每個repo 使用者名稱/郵箱

$ git config user.email “xxxx@xx.com”
$ git config user.name “xxxx”
檢視git專案的配置

git config –list
8.命令列進入專案目錄,重建 origin (whatever 為相應專案地址)

$ git remote rm origin

遠端倉庫地址,注意Host名稱

$ git remote add origin git@second.github.com:githubUserName/repName.git
$ git remote -v # 檢視遠端
10.遠端 push 測試
首先在 GitHub 上新建一個名為 testProj 的遠端倉庫,然後再在本地建一個本地倉庫。

$ cd ~/documnts
$ mkdir testProj
1.進入 testProj 資料夾,建立 REDME.md檔案
2.初始化此資料夾為git
3.新增並提交README.md到Git本地倉庫
4.新增遠端倉庫
5.把README.md推送到遠端倉庫

$ cd testProj
$ echo “# ludilala.github.io” >> README.md
$ git init
$ git add README.md
$ git commit -m “first commit”

如果前面已新增遠端連線,就無需再次新增

$ git remote add origin https://github.com/ludilalaa/…
$ git push -u origin master

作者:牧曉逸風
連結:http://www.jianshu.com/p/04e9…
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章