如何將一個(gè) Git 項(xiàng)目關(guān)聯(lián)到兩個(gè)遠(yuǎn)程倉(cāng)庫(kù)(且不出錯(cuò))
說實(shí)話,有時(shí)候你就是不想選邊站。
也許公司用的是 GitHub,但團(tuán)隊(duì)的 CI/CD 流程跑在 GitLab 上; 或者你正在測(cè)試遷移方案; 又或者你就是喜歡多備份備份。
懂你的心情。
好消息是:完全可以將本地 Git 倉(cāng)庫(kù)同時(shí)關(guān)聯(lián)多個(gè)遠(yuǎn)程倉(cāng)庫(kù),并且用一次推送操作同步更新。
這招已經(jīng)在多個(gè)生產(chǎn)項(xiàng)目中實(shí)測(cè)過了,真的比想象中簡(jiǎn)單得多。
下面帶你一步步操作,讓你的 .git/config
文件安然無恙。
一個(gè)本地項(xiàng)目,兩個(gè)遠(yuǎn)程倉(cāng)庫(kù),一條命令推送
無需額外克隆,無需復(fù)雜腳本。
第一步:準(zhǔn)備本地倉(cāng)庫(kù)
可以用現(xiàn)有倉(cāng)庫(kù),也可以新建一個(gè):
git init
如果已經(jīng)連接了 GitHub 或其他遠(yuǎn)程,執(zhí)行:
git remote -v
會(huì)看到類似輸出:
origin git@github.com:username/repo.git (fetch)
origin git@github.com:username/repo.git (push)
第二步:添加第二個(gè)遠(yuǎn)程倉(cāng)庫(kù)
假設(shè)第二個(gè)遠(yuǎn)程是 GitLab,遠(yuǎn)程名可以自定義,常見如 origin2
或 gitlab
,這里用清晰的 gitlab
:
git remote add gitlab git@gitlab.com:username/repo.git
再次查看:
git remote -v
輸出會(huì)是:
origin git@github.com:username/repo.git (fetch)
origin git@github.com:username/repo.git (push)
gitlab git@gitlab.com:username/repo.git (fetch)
gitlab git@gitlab.com:username/repo.git (push)
這樣你就同時(shí)關(guān)聯(lián)了兩個(gè)遠(yuǎn)程。
第三步:同時(shí)推送到兩個(gè)遠(yuǎn)程倉(cāng)庫(kù)
有兩種方式:
方式一:手動(dòng)分別推送
git push origin main
git push gitlab main
靈活且安全,但要多執(zhí)行一次命令。
方式二:配置多推送地址,實(shí)現(xiàn)一次命令推送兩個(gè)遠(yuǎn)程
編輯 .git/config
,在 [remote "origin"]
下添加多條 pushurl
:
[remote "origin"]
url = git@github.com:username/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = git@github.com:username/repo.git
pushurl = git@gitlab.com:username/repo.git
此后執(zhí)行:
git push origin main
就會(huì)同步推送到 GitHub 和 GitLab 兩個(gè)倉(cāng)庫(kù)。
小貼士:
如果用于 CI/CD,請(qǐng)確保兩個(gè)倉(cāng)庫(kù)的流水線不會(huì)因同一提交重復(fù)觸發(fā),這點(diǎn)很重要。
額外操作:重命名或刪除遠(yuǎn)程
重命名遠(yuǎn)程:
git remote rename origin github
刪除遠(yuǎn)程:
git remote remove gitlab
為什么要用兩個(gè)遠(yuǎn)程?
- 備份:GitHub 崩了,GitLab 還在;
- 遷移:試用新平臺(tái),舊平臺(tái)繼續(xù)線上運(yùn)行;
- 鏡像:想多地方展示代碼,簡(jiǎn)單又直觀;
- CI/CD 分離:GitHub 管理代碼,GitLab 管理部署。
個(gè)人感想
這招救場(chǎng)無數(shù)。
無論面對(duì)多個(gè)客戶、團(tuán)隊(duì),還是平臺(tái)環(huán)境,能從同一個(gè)本地庫(kù)同時(shí)推送多個(gè)遠(yuǎn)程倉(cāng)庫(kù),是開發(fā)效率的倍增器。
而且,每次用起來都感覺自己像個(gè)大佬。
趕緊把這招搬進(jìn)你的工作流吧!