干貨!Git 如何使用多個托管平台管理代碼


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

背景

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

實現方法

添加密鑰對

在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文件管理

# 配置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 -T git@github.com
ssh -T git@gitee.com

成功則會得到這樣的反饋

gitee連接成功

創建倉庫

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

接着在本地項目根目錄創建git倉庫

git init

本地與remote關聯

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

// 添加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 即主干分支。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM