乾貨!Git 如何使用多個託管平臺管理代碼

考慮到github不能免費建立私有倉庫緣由,最近開始在使用碼雲託管項目,這樣避免了鏈接數據庫的用戶密碼等信息直接暴露在公共倉庫中。今天忽然想到一個點,就是能不能同時把代碼推送到github和碼雲上呢?答案是能夠的。git

背景

首先,咱們在開始一個項目時,在本地寫了一些代碼,須要同時託管到github和碼雲(gitee)上。這個時候咱們要怎麼辦呢?請接着看。github

實現方法

添加密鑰對

在C:\Users\robin.ssh目錄下運行git bash數據庫

// 這個是給github生成的
ssh-keygen -t rsa -C "1148121254@qq.com"
// 這個是給碼雲生成的
ssh-keygen -t rsa -C "cumtrobin@163.com"

生成後自行命名管理,這裏再也不贅述。接着把公鑰分別放在github和碼雲上。私鑰能夠用config文件管理bash

# 配置github.com
Host github.com                 
    HostName github.com
    IdentityFile C:\\Users\\robin\\.ssh\\id_rsa_github
    PreferredAuthentications publickey
    User cumtRobin

# 配置gitee.com
Host gitee.com
    HostName gitee.com
    IdentityFile C:\\Users\\robin\\.ssh\\id_rsa_gitee
    PreferredAuthentications publickey
    User Tusi

接着咱們測試一下ssh

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

成功則會獲得這樣的反饋測試

gitee鏈接成功

建立倉庫

首先是在github和碼雲上分別建立一個倉庫。這個玩過github的都知道,不細說。this

接着在本地項目根目錄建立git倉庫加密

git init

本地與remote關聯

要把兩個remote倉庫與本地git倉庫關聯起來,咱們直接來運行url

// 添加github的遠程庫
git remote add origin git@github.com:cumtRobin/BlogFrontEnd.git
// 添加碼雲的遠程庫
git remote add gitee git@gitee.com:tusi/BlogFrontEnd.git

而後咱們運行git remote查看添加的遠程庫列表命令行

git remote
// 獲得如下值
origin
gitee

說明已經添加成功,接着咱們分別查看git status,會看到本地有不少文件待提交,接着git add, git commit,最後git push的時候要注意分開push

// push到github主分支
git push origin master
// push到gitee主分支
git push gitee master

雖然麻煩了一點,須要push兩次,可是目的是初步達成了。若是想要一次性push解決,那也不是沒有辦法。

一次性push

爲了不引發歧義,這裏先將origin,gitee的remote庫刪除

git remote rm origin
git remote rm gitee

從新添加remote

git remote add all git@github.com:cumtRobin/BlogFrontEnd.git

能夠看到,我實際上是添加的github的遠程庫,只不過把它的名字叫作all。接着咱們把碼雲上的remote庫也關聯起來。

git remote set-url --add all git@gitee.com:tusi/BlogFrontEnd.git

這樣操做之後,就能夠運行一條push命令了

git push all --all

有人說能夠改.git/config文件實現。其實剛纔上面的命令修改的就是config文件,可是本人建議,多練練命令行,這樣也會加深對git的理解。這時候咱們再查看一下.git/config文件。能夠看到remote all下面是有兩個url的。

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "all"]
    url = git@github.com:cumtRobin/BlogFrontEnd.git
    url = git@gitee.com:tusi/BlogFrontEnd.git

學會了兩個託管平臺的配置,那使用更多的託管平臺也就不難實現了。

ps:再分享一個小技巧,因爲我在生成ssh密鑰時,加了passphrase,致使我每次push都要輸入密碼,很煩人。

其實,只要重置一下這個passphrase就能夠了。

// 進入到.ssh目錄,運行git bash

ssh-keygen -p

// 再輸入密鑰名,如id_rsa_github,先輸入舊密碼,而後一路回車便可,多個密鑰重複此操做便可。

再也不須要每次輸入密碼


2019-04-18

  1. 補充 git pull 的細節

由於都是從本地 push 代碼到遠程倉庫,好久沒有從遠程倉庫拉取代碼了,今天不當心在 github 上改了倉庫中的 readme 文件,致使和 gitee 不一樣步。使用 git pull 報錯,慌的一批。

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=all/<branch> master

原來是要使用下面這條命令才行。

$ git pull all master
From github.com:cumtRobin/BlogFrontEnd
 * branch            master     -> FETCH_HEAD
Already up to date.

上面的 all 是指 remote ,即遠程倉庫,master 是指分支名,master 即主幹分支。

相關文章
相關標籤/搜索