背景

通常情况下,一个本地 Git 仓库对应一个远程仓库,每次pull和push仅涉及本地仓库和该远程仓库的同步;然而,在一些情况下,一个本地仓库需要同时关联多个远程仓库,比如:同时将一个项目发布在 Github 和 Coding 上,以兼顾国内外的访客(顺便一提,本站从近期起即是如此)。

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

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

首先,查看本地仓库所关联的远程仓库:(假定最初仅关联了一个远程仓库)

$ git remote -v
origin  git@github.com:keithnull/keithnull.github.io.git (fetch)
origin  git@github.com:keithnull/keithnull.github.io.git (push)

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

$ git remote add coding.net git@git.coding.net:KeithNull/keithnull.github.io.git

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

$ git remote -v
coding.net      git@git.coding.net:KeithNull/keithnull.github.io.git (fetch)
coding.net      git@git.coding.net:KeithNull/keithnull.github.io.git (push)
origin  git@github.com:keithnull/keithnull.github.io.git (fetch)
origin  git@github.com:keithnull/keithnull.github.io.git (push)

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

$ git push origin master
$ git push coding.net master

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

$ git pull origin master
$ git pull coding.net master

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

在方法 1 中,由于我们添加了多个远程仓库,在push和pull时便面临了仓库的选择问题。诚然如此较为严谨,但是在许多情况下,我们只需要保持远程仓库完全一致,而不需要进行区分,因而这样的区分便显得有些“多余”。

同样地,先查看已有的远程仓库:(假定最初仅关联了一个远程仓库)

$ git remote -v
origin  git@github.com:keithnull/keithnull.github.io.git (fetch)
origin  git@github.com:keithnull/keithnull.github.io.git (push)

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

$ git remote set-url --add origin git@git.coding.net:KeithNull/keithnull.github.io.git

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

$ git remote -v
origin  git@github.com:keithnull/keithnull.github.io.git (fetch)
origin  git@github.com:keithnull/keithnull.github.io.git (push)
origin  git@git.coding.net:KeithNull/keithnull.github.io.git (push)

可以看到,我们并没有如方法 1 一般增加远程仓库的数目,而是给一个远程仓库赋予了多个地址(或者准确地说,多个用于push的地址)。

因此,这样设置后的push 和pull操作与最初的操作完全一致,不需要进行调整。

总结

以上是给一个本地仓库关联多个远程仓库的两种方法,二者各有优劣,不过出于简便考虑,我最终采用了方法 2。

此外,上述内容中涉及到的 Git 指令略去了许多不常用的参数,如需更加详细的说明,可以查阅 Git 文档,或者直接在命令行运行git remote --help。

本地Git仓库关联多个远程仓库的两种方法相关推荐

  1. Git 安装使用 本地Git 服务器的使用 Github 远程仓库

    一.Git 安装使用 1. Git 安装配置 1.Yum 安装 Git Centos/RedHat 安装命令 [root@localhost ~]# yum -y install curl-devel ...

  2. win10远程桌面设置计算机,win10开启远程桌面的两种方法

    远程桌面连接功能是IP地址使用到最强大的功能,远程桌面连接是指当离开电脑时使用另一能电脑控制本电脑,对被控制电脑进行操作. 有时候,你发现坐在一台计算机面前,但是需要另一台计算机上的数据或工具.或者, ...

  3. windows修改远程端口脚本-两种方法

    脚本方法: @echo off color 0a title @@ 修改Windows win7/10远程桌面服务端口号 @@ reg add "HKLM\SYSTEM\CurrentCon ...

  4. Git关联多个远程仓库

    前言:最近遇到了这样一个问题,公司和家里各有一台电脑,下班的时候代码还没写完,但是不想在公司加班,可是代码还报着错,不想提交到公司的远程项目(GitLab)中让领导发现,于是就想在Gitee上建一个私 ...

  5. git 本地重新关联新的远程仓库命令/查看本地关联远程仓库

    git remote -v // 查看本地已经关联的远程仓库 git remote rm name // # 删除远程仓库 git remote rename old_name new_name // ...

  6. 创建局域网内远程git仓库,并将本地仓库push推到远程仓库中

    转自原文 创建局域网内远程git仓库,并将本地仓库push推到远程仓库中 1. 先远程登录局域网内服务器 2. 在服务器里 切换到某个文件夹下, 然后新建一个文件夹用作git仓库(文件夹名最好跟准备推 ...

  7. Git如何创建本地分支并推送到远程仓库

    Git如何创建本地分支并推送到远程仓库 假设新的分支名称为:new_branch -- 切换到拉取分支的原分支,假设为master git checkout master git pull -- 拉取 ...

  8. 本地仓库推送到远程仓库的git操作

    本地仓库推送到远程仓库的git操作 1>创建远程仓库按钮 2>创建远程仓库,两部到位 3>将本地仓库的文件推送到远程仓库 (1)由于远程库是空的,我们第一次推送master分支时,加 ...

  9. [git]一个本地仓库,多个远程仓库

    1. git clone某个远程仓库的代码到本地 2. git remote -v 查看当前远程仓库地址 3. git remote add *2***(新远程仓库名) ****(新远程仓库地址) 4 ...

  10. 【Git】IntelliJ IDEA 提交代码到 GitCode 远程仓库 ( GitCode 创建远程仓库 | 将本地工程推送到 GitCode 远程仓库 | 验证权限 | 生成个人访问令牌 )

    文章目录 前言 一.GitCode 创建远程仓库 二.将本地工程推送到 GitCode 远程仓库 三.验证权限 前言 GitHub 又挂了 , 国内不太好用 , 现在开始使用 gitcode , 地址 ...

最新文章

  1. angula简单应用---购物篮
  2. 第四范式入围Forrester Wave™:预测分析与机器学习中国市场评测报告 位列领导者行列...
  3. 播放提示音+页面右下角提示框
  4. smarty 引用php类,smarty 的PHP引用
  5. jQuery 源码解析一:jQuery 类库整体架构设计解析
  6. 经过 180 年的训练,OpenAI 在 DOTA 2 上完虐人类!
  7. char 转换 二进制 java_使用Java读取二进制文件并将其转换为char文件 - java
  8. linux -- 个人笔记
  9. 对软件开发人员的几个阶段思考和总结
  10. scratch优秀案例-中国风-西游记故事系列之孙悟空为何大战白骨精
  11. ​ 解决金仓数据库KingbaseES对pg模式的单机数据库插入数据时,出现日志打印的问题
  12. 制作U盘引导盘,安装Ubuntu18.04系统
  13. Android通过wifi输出声音,SoundWire – 将手机变成电脑的音箱,通过 WiFi播放电脑内的声音...
  14. 入侵防御系统 IPS
  15. go学习 --- go协程
  16. 随着时间推移虚拟机C盘空间不够,如何在原有C盘基础上进行扩容!
  17. linux 查看CPU核数
  18. Arrays.aslist新建的list集合不能add()、remove()你知道吗?
  19. C# socket通信 接收缓冲区大小设置,以及粘包问题的解决
  20. 不能用来修饰interface的有

热门文章

  1. 浏览器加载渲染网页过程解析
  2. 第七章 面向对象分析
  3. CSS的样式合并与模块化
  4. android Xmpp+openfire 消息推送 :SASL authentication failed using mechanism DIGEST-MD5
  5. 商人Larry Ellison炮轰云计算
  6. python3+selenium入门12-警告框处理
  7. 一步步完成FastDFS + Spring MVC上传下载整合示例
  8. Windows 10的成功能让苹果学到点什么?
  9. 安装部署shipyard
  10. 在Seismic.NET下用最少的语句写出一个剖面显示程序