引言
通常情况下,一个本地 Git
仓库对应一个远程仓库,每次pull
和push
仅涉及本地仓库和该远程仓库的同步;然而,在一些情况下,一个本地仓库需要同时关联多个远程仓库,比如:同时将一个项目发布在 Gitee
和 Coding.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无需额外操作
在方法一中,由于我们添加了多个远程仓库,在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)
然后,不额外添加远程仓库,而是给现有的远程仓库添加额外的 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
的地址)。因此,这样设置后的push
和pull
操作与最初的操作完全一致,不需要进行调整。这样一次性就可以提交所有的仓库。
扩展阅读
这两种操作的本质都是改变 git
的 config
配置文件,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
,感谢您的关注~