实现跨平台同步:详解如何将本地 Git 仓库连接到多个云端仓库

引言

通常情况下,一个本地 Git 仓库对应一个远程仓库,每次pullpush仅涉及本地仓库和该远程仓库的同步;然而,在一些情况下,一个本地仓库需要同时关联多个远程仓库,比如:同时将一个项目发布在 GiteeCoding.net 上,以兼顾不同地区的用户访问。

那么,如何让一个本地仓库同时关联多个远程仓库呢?

解决方法

方法一:每次push、pull时需分开操作

首先,查看本地仓库所关联的远程仓库:

bash 复制代码
λ git remote -v
origin  https://gitee.com/xxxx/vite-git-test.git (fetch)
origin  https://gitee.com/xxxx/vite-git-test.git (push)

然后,用git remote add <name> <url>添加一个远程仓库,其中name可以任意指定(对应上面的origin部分),比如:

bash 复制代码
λ git remote add coding https://e.coding.net/xxxx/gittest/vite-test.git

再次查看本地仓库所关联的远程仓库,可以发现成功关联了两个远程仓库:

bash 复制代码
λ git remote -v
coding  https://e.coding.net/xxxx/gittest/vite-test.git (fetch)
coding  https://e.coding.net/xxxx/gittest/vite-test.git (push)
origin  https://gitee.com/xxxx/vite-git-test.git (fetch)
origin  https://gitee.com/xxxx/vite-git-test.git (push)

此后,若需进行push操作,则需要指定目标仓库,git push <repo> <branch>,对这两个远程仓库分别操作:

bash 复制代码
λ git push origin master
λ git push coding master

同理,pull操作也需要指定从哪个远程仓库拉取,git pull <repo> <branch>,从这两个仓库中选择其一:

bash 复制代码
λ git pull origin master
λ git pull coding master

方法二:push和pull无需额外操作

在方法一中,由于我们添加了多个远程仓库,在pushpull 时便面临了仓库的不停选择问题。但是在许多情况下,我们只需要保持远程仓库完全一致,而不需要进行区分,因而这样的区分便显得有些浪费时间。

具体操作,先查看已有的远程仓库:

bash 复制代码
λ git remote -v
origin  https://gitee.com/xxxx/vite-git-test.git (fetch)
origin  https://gitee.com/xxxx/vite-git-test.git (push)

然后,不额外添加远程仓库,而是给现有的远程仓库添加额外的 URL。使用git remote set-url -add <name> <url>,给已有的名为name的远程仓库添加一个远程地址,比如:

bash 复制代码
λ git remote set-url --add origin https://e.coding.net/xxxx/gittest/vite-demo-test.git

再次查看所关联的远程仓库:

bash 复制代码
λ git remote -v
origin  https://gitee.com/xxxx/vite-git-test.git (fetch)
origin  https://gitee.com/xxxx/vite-git-test.git (push)
origin  https://e.coding.net/xxxx/gittest/vite-demo-test.git (push)

可以看到我们并没有如方法一, 增加远程仓库的数目,而是给一个远程仓库添加了多个地址(或者准确地说,多个用于push的地址)。因此,这样设置后的pushpull操作与最初的操作完全一致,不需要进行调整。这样一次性就可以提交所有的仓库。

扩展阅读

这两种操作的本质都是改变 gitconfig 配置文件,config 文件是当前 git 项目根目录下 .git/config.git 目录是隐藏文件),使用 git config -e 或者 cat .git/config 命令行也可查看编辑内容。

bash 复制代码
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = https://gitee.com/xxxx/vite-git-test.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://e.coding.net/xxxx/gittest/vite-demo-test.git
[remote "coding"]
        url = https://e.coding.net/xxxx/gittest/vite-test.git
        fetch = +refs/heads/*:refs/remotes/coding/*
  • 当使用 git remote add <name> <url> 时,追加 [remote "name"] 的标签。
bash 复制代码
[remote "coding"]
        url = https://e.coding.net/xxxx/gittest/vite-test.git
        fetch = +refs/heads/*:refs/remotes/coding/*  
  • 使用 git remote set-url --add <name> <url> 会为名为<name> 的仓库添加 url 连接,比如示例中, 在 origin 下会多出一个 url 的键值对
bash 复制代码
[remote "origin"]
        url = https://gitee.com/xxxx/vite-git-test.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://e.coding.net/xxxx/gittest/vite-demo-test.git  

删除关联的远程仓库和地址

针对上面的这两种设置方法都有对应的删除命令:

bash 复制代码
# 删除名为 <name> 的远程连接
git remote remove <name>

# 删除 <name> 仓库下的指定连接
git remote set-url --delete <name> <url>

重名远程仓库

bash 复制代码
git remote rename <旧名> <新名>

写在最后

通过本篇的文章可以学习到一个本地仓库关联多个远程仓库的两种方法,喜欢的话帮忙点个赞 + 关注吧,将持续更新 前端 相关的文章,还可以关注我的公众号 梁三石FE ,感谢您的关注~

相关推荐
llz_1121 小时前
web-第二次课后作业
前端·后端·web
vipbic7 小时前
别再把“做个H5”挂嘴边了:这个词,官方压根就没有定义过
前端
ZC跨境爬虫8 小时前
跟着 MDN 学CSS day_39:(Flexbox 弹性盒子核心机制)
前端·css·ui·html·tensorflow
小陈同学呦8 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
喵个咪9 小时前
GoWind Toolkit 前端代码生成|Vue3(ElementPlus/Vben)、React(AntDesign)全自动一键生成教程
前端·vue.js·react.js
摆烂大大王10 小时前
玩转 OpenClaw:用 TaskFlow + Heartbeat 打造自动化工作流
前端·人工智能·自动化
zhangxingchao10 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
梦想的颜色10 小时前
TypeScript 完全指南(上):从零开始掌握类型系统
前端·typescript
之歆11 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6
lichenyang45311 小时前
鸿蒙 MVVM 实战:从 Demo 到工程化,聊聊登录、状态管理与埋点系统设计
前端