考慮到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
成功則會得到這樣的反饋
創建倉庫
首先是在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
- 補充
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
即主干分支。