实现跨平台同步:详解如何将本地 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 ,感谢您的关注~

相关推荐
J不A秃V头A43 分钟前
Vue3:编写一个插件(进阶)
前端·vue.js
司篂篂1 小时前
axios二次封装
前端·javascript·vue.js
姚*鸿的博客2 小时前
pinia在vue3中的使用
前端·javascript·vue.js
宇文仲竹2 小时前
edge 插件 iframe 读取
前端·edge
Kika写代码2 小时前
【基于轻量型架构的WEB开发】【章节作业】
前端·oracle·架构
天下无贼!3 小时前
2024年最新版Vue3学习笔记
前端·vue.js·笔记·学习·vue
Jiaberrr3 小时前
JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
前端·javascript·tree·树形·过滤筛选
赵啸林3 小时前
npm发布插件超级简单版
前端·npm·node.js
罔闻_spider4 小时前
爬虫----webpack
前端·爬虫·webpack
吱吱鼠叔4 小时前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab