Git 配置同时提交代码到多个仓库,如同步代码到 gitee、gitlab、github
背景
在日常开发中,我们可能会有这样子的一种需求,需要同时将代码提交到过个git仓库的情况
比如我的代码仓库是在 gitee,但是我又想要使用 gitlab 仓库的 ci/cd 功能,一开始每次提交都要分别推送到两个仓库,不仅麻烦还容易漏推导致版本不一致。后来研究了Git的远程仓库配置,发现只需简单设置就能实现“一次提交,多仓同步”,效率直接翻倍。
这篇就把从基础配置到进阶优化的全流程分享出来,亲测有用,非常推荐使用。
原理
Git的单个远程仓库(比如默认的origin)支持配置多个推送地址(push URL)。
平时我们用“git push origin main”推送时,Git会默认向origin的推送地址发送代码;
如果给origin配置多个推送地址,执行一次push命令,Git就会自动把代码推送到所有配置的地址上,这就是多仓库同步的核心逻辑。
简单说,远程仓库就像一个“分发中心”,我们可以给这个中心绑定多个“目的地”(Gitee、GitHub等),一次分发就能覆盖所有目的地。核心优势是:不用修改提交流程,保持“add→commit→push”的常规操作。
实现
首先,进入仓库中隐藏目录 .git 目录,找到 config 文件
vim config
## 找到
[remote "origin"]
url = https://xxxx:xxx@gitee.com/xxx/xxx.git # 这是你原来的仓库地址
url = https://username:password@gitlab.com/xxx/xxx.git # 添加你需要同步的仓库地址
fetch = +refs/heads/*:refs/remotes/origin/*添加你需要同步的仓库地址
url = https://<账号>:<密码或者密钥>@gitlab.com/<仓库地址>注意:如果你的 账号 / 密码 存在特殊字符,则需要进行转义
比如
@ —> %40
Gitlab 密钥的生成方法,如下图
以上是以 gitlab 为例,其他代码仓库的配置逻辑一致
配置完成后就可以测试下代码提交,修改代码,提交后验证下配置的仓库是否有提交更新记录
常见问题
Q1. 推送时提示「Permission denied (publickey)」?
这是 SSH 权限认证失败导致的,通常有两个原因:
-
本地未生成 SSH 密钥:执行
ssh-keygen -t ed25519 -C "你的邮箱"生成密钥,一路回车默认即可; -
公钥未配置到远程仓库:执行
cat ~/.ssh/id_ed25519.pub(Windows 路径为C:\Users\你的用户名\.ssh\id_ed25519.pub)复制公钥,到 GitHub、Gitee 等平台的「设置」→「SSH 公钥」中添加,保存后重新推送即可。
Q2. 远程仓库版本比本地新,推送时提示「rejected」?
这是因为其他开发者向远程仓库提交了代码,导致远程版本比本地新。
解决方案:先拉取远程代码合并到本地,再推送
如果是多仓库同步,建议先拉取一个主要仓库(如 GitHub)的代码,合并后再同步推送到所有仓库,避免出现多仓库版本混乱。
Q3. 用 HTTPS 地址推送时,每次都要输入账号密码?
可以配置 Git 缓存凭证,避免重复输入
## Windows 配置缓存凭证
git config --global credential.helper wincred
## Mac 配置缓存凭证(缓存时间默认 15 分钟)
git config --global credential.helper osxkeychain
## Linux 配置缓存凭证(缓存时间 1 小时,单位秒)
git config --global credential.helper 'cache --timeout=3600'配置后首次推送输入账号密码,后续会自动缓存,无需重复输入。
总结
其实 Git 的远程仓库配置还有很多灵活用法,比如给不同仓库设置不同的拉取和推送地址,大家可以根据自己的需求探索。
如果还有其他问题,欢迎在评论区交流~
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/git-sync-warehouses/
备用原文链接: https://blog.fiveyoboy.com/articles/git-sync-warehouses/