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