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

相关推荐
BD_Marathon4 分钟前
【JavaWeb】CSS浮动
前端·css
1024肥宅8 分钟前
手写 Promise:深入理解 JavaScript 异步编程的核心
前端·javascript·promise
铅笔侠_小龙虾10 分钟前
Vue 学习目录
前端·vue.js·学习
悟能不能悟12 分钟前
vue的history和hash模式有什么不一样
前端·vue.js
晓庆的故事簿13 分钟前
前端的浏览器地址传参
前端
*星星之火*37 分钟前
【大白话 AI 答疑】第6篇 大模型指令微调:instruction/input/output核心解析及案例
服务器·前端·人工智能
北杳同学1 小时前
前端一些用得上的有意思网站
前端·javascript·vue.js·学习
张3蜂1 小时前
CSRF Token:网络应用安全的关键防线——深度解析与实战指南
前端·安全·csrf
IT_陈寒1 小时前
Redis 性能骤降50%?这5个隐藏配置陷阱你可能从未注意过
前端·人工智能·后端
躺着听Jay1 小时前
【1267 - Illegal mix of collations 】mysql报错解决记录
java·linux·前端