git push 的符号笔有什么用_如何同步多个 git 远程仓库

点击上方“后端技术精选”,选择“置顶公众号”

技术文章第一时间送达!

作者:taadis

my.oschina.net/taadis/blog/3073220

题外话,开发中遇到问题或者学习新技术时缺少交流环境,可以点击加入【后端技术交流群

日常需求

以前源码是托管在 github 的, 现在想要同步托管在 gitee, 一做备份分发, 二方便国内下载使用(网速可观), 三防止被墙…

方式一 使用 gitee 的强制同步

之前在 github 托管了这么一个项目 mirrors-in-china, 后来国内出了 gitee, 那么想着把项目同步一份到 gitee, 方便大家查看… 正巧 gitee 提供强制同步功能, 方便操作…

75936e8341c7b53f4232bac50e4b7fac.png

我还是只用维护 github 那份源码, gitee 这边没忘记的话, 手搓点击下强制同步按钮即可.

但是容易忘记, 造成两边不完全同步.

不过我这个项目本身就非常简单, 这点同步时差完全没大问题, 够用, 并且没有其他任何多余的操作.

方式二 手搓 push 多次

换另一个项目来说, 我之前在 github 托管了这么一个项目 GlobalScanner.Sdk, 应广大小伙伴需求, 希望把项目在国内同步一份, 方便下载/参考/使用.

那么不外乎就是配置多个远程库地址, 多次推送咯, 那么我们先来看看现有远程库的情况:

$ git remote --verbose
origin  git@github.com:taadis/GlobalScanner.Sdk.git (fetch)
origin  git@github.com:taadis/GlobalScanner.Sdk.git (push)

可以看到目前仅有 git@github.com:taadis/GlobalScanner.Sdk.git 这个远程库地址.

我们来加一个 gitee 的远程地址, 首先在 gitee 建好同步仓库, 然后我们在本地添加一个新的远程库地址:

$ git remote add giteeorigin git@gitee.com:taadis/GlobalScanner.Sdk.git

添加完成后我们查看一下:

$ git remote --verbose
giteeorigin     git@gitee.com:taadis/GlobalScanner.Sdk.git (fetch)
giteeorigin     git@gitee.com:taadis/GlobalScanner.Sdk.git (push)
origin  git@github.com:taadis/GlobalScanner.Sdk.git (fetch)
origin  git@github.com:taadis/GlobalScanner.Sdk.git (push)

可以查看到以下2个远程库地址:

  • giteeorigin: 是我们新加的 gitee 的远程库地址

  • origin: 是我们之前在 github 的远程库地址

接下来同步:

git add .
git commit -m "add gitee"
git push -u origin master
git push -u giteeorigin master

有链接有真相:

github:

https://github.com/taadis/GlobalScanner.Sdk/commit/da00f0584c5a2699bb621e99a00fe15dece33d38

gitee:

https://gitee.com/taadis/GlobalScanner.Sdk/commit/da00f0584c5a2699bb621e99a00fe15dece33d38

比之前多个一次 git push 操作…其他和之前没有太大区别…没有更多的心智负担.

但是经常容易忘记…

方式三 最多跑一次

不想着法偷懒的 coder 不是好程序员, 秉承 "最多跑一次" 的理念, 让我们试试怎么一次 push 统统搞定.

在本地 git 仓库里找到这个文件 .git/config, 内容如下:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = git@github.com:taadis/GlobalScanner.Sdk.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote "giteeorigin"]
    url = git@gitee.com:taadis/GlobalScanner.Sdk.git
    fetch = +refs/heads/*:refs/remotes/giteeorigin/*

改为如下:

合并2个 remote 配置

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = git@github.com:taadis/GlobalScanner.Sdk.git
    url = git@gitee.com:taadis/GlobalScanner.Sdk.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

上面这个手动配置是为了更好的说明而已, 其实可以用以下命令简化操作, 在 origin 节点下补充了一个新的远程地址.

$ git remote set-url --add origin git@gitee.com:taadis/GlobalScanner.Sdk.git

看看补充后的远程地址情况

git remote --verbose
origin  git@github.com:taadis/GlobalScanner.Sdk.git (fetch)
origin  git@github.com:taadis/GlobalScanner.Sdk.git (push)
origin  git@gitee.com:taadis/GlobalScanner.Sdk.git (push)

注意看后面的 (fetch)(push), 相信你会明白点什么.

然后我们可以继续这样使用来实现 github & gitee 的同步推送和分发:

git add .
git commit -m "github & gitee 同步推送和分发"
git push origin master

有链接有真相:

github:

https://github.com/taadis/GlobalScanner.Sdk/commit/6846226ff2be56ed0f58c9345bac4a0170f1880f

gitee:

https://gitee.com/taadis/GlobalScanner.Sdk/commit/6846226ff2be56ed0f58c9345bac4a0170f1880f

可以看到, 使用上和最初没有任何区别, 只是多配置了一次, 算是实现了 "最多配(跑)一次".

总而言之

几种方式, 各取所需咯.

(点击即可跳转阅读)

1. SpringBoot内容聚合

2. 面试题内容聚合

3. 设计模式内容聚合

4. 排序算法内容聚合

5. 多线程内容聚合

6. 7个IntelliJ IDEA必备插件,提高编码效率

7. IntelliJ IDEA 从入门到上瘾教程,2019图文版!

看到这里了,关注一个?

4339500b2a5a433ca423d59922ea14c5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java EE重新审视设计模式:观察者

除了以多种语言和许多应用程序实现之外,Observer Pattern自1.0版以来一直是Java的一部分。 观察者模式也是好莱坞原则的良好实施。 就像好莱坞的特工喜欢回调候选人以代替某个职位,而不是每天被要求询问可用工作一样,大多数服务器端资源&…

POI搜索简介

用户输入——用户输出-----------------------------------------------------------而POI搜索引擎,需要做的就是拿到输入条件,给出用户比较满意的结果。用户角度:输入:尽量简单,且符合心意输入时的假设:假…

2、Spring的 IoC详解(第一个Spring程序)

Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。在这句话中重点有两个,一个是IoC,另一个是AOP。今天我们讲第一个IoC。 一. IoC理论的背景 我们都知道…

排除服务器简单系统故障方法,引导CD排除服务器故障方法有哪些?

尽管Linux系统以稳定可靠著称,但由于硬件问题有时仍会崩溃/或无法引。针对这一问题,最好的解决办法就是使用Linux系统引导CD。为了方便读者,笔者在下面列出了安装Red Hat Linux 8。0的最必须步骤。为安装过程作笔记在Red Hat Linux系统典型安…

js 获取father_(原创)Node.JS实战26:强大的工作池。收藏吧!你一定会用的到。...

在实际项目中,如果遇到需要大计算量的操作,按需fork(分叉)其实不是一个好的选择。因为fork的子进程也是V8(NodeJS的核心引擎)的新实例,每创建一个新实例,需要约30毫秒启动时间&#…

具有ReadWriteLock的Java并发

编写多线程Java应用程序并不是小菜一碟。 必须格外小心,因为同步不良会使您的应用程序一s不振。 JVM堆由所有线程共享。 如果多个线程需要同时使用相同的对象或静态类变量,则必须谨慎管理对共享数据的线程访问。 从1.5版开始,JSDK中包含了在并…

修复steam服务器失败,steam服务器链接失败

steam服务器链接失败 内容精选换一换当NTP服务器异常时产生该告警。当NTP服务器异常消除时,该告警恢复。主OMS节点配置的NTP服务器异常,可能会导致主OMS节点与外部服务器不能同步时间,集群时间可能会产生飘移。NTP服务器网络异常。与NTP服务器…

qemu-kvm简单使用

qemu-kvm主要有以下几个选项: -snapshot: 创建快照-m: 指定内存大小-smp: 指定处理器个数-cpu: 指定CPU类型-name: 设置虚拟机名称-vnc: 使用vnc连接-boot: 指定启动相关的选项-net: 指定网卡相关的选项-drive: 指定硬盘/光盘相关的选项qemu-kvm -m 128 -name first -smp 2 -dr…

将jar添加到发布目录_第32批免购置税新能源车型目录发布;通用BEV3平台将入华...

1、第32批免购置税新能源车型目录发布,几何X/理想ONE等283款车型入选6月2日,工信部发布《免征车辆购置税的新能源汽车车型目录(第三十二批)》,共有283款新能源车型入选。其中新能源乘用车方面包括,一汽大众Q2L/e-BORA、东风风神E7…

HPROF –内存泄漏分析教程

本文将为您提供有关如何通过生成和分析Sun HotSpot JVM HPROF堆转储文件来分析JVM内存泄漏问题的教程。 一个现实的案例研究将用于此目的:Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器:Oracle Weblogic Server 9.2 MP1 中…

mq服务器与客户端消息同步,使用 ActiveMQ 实现JMS 异步调用

目录简介服务之间的同步调用,可以使用 HTTP 或 RPC 来完成,但并非所有的调用都需要同步,有些场景下,当客户端调用服务端时,并不需要等待服务端做出响应,此时就应该使用异步调用。异步调用的常用方式是基于 …

多个数字数组_七个问题帮助初学者深入理解Java数组

短文涨姿势,看了不白看,不关注等啥?几乎所有的高级语言当中,都提供了一种叫做”数组”的东西,Java语言当然也不例外。我们通过数组可以很方便的存储和管理一组数据。因为在Java语言当中使用数组非常的方便,…

java 异常练习题1

建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出Nag…

大话设计模式读书笔记--6.原型模式

简单的复制粘贴极有可能造成重复代码的灾难, 但是java中提供了克隆的功能, 如果一个对象创建过程复杂,又要频繁使用, 在初始化信息不发生变化的情况下,应当采取克隆而不是new一个对象 定义 原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 也就是说,…

Java 7#8:测试台上的NIO.2文件通道

关于新JDK 7功能的另一篇博客文章。 这次我正在写有关新的AnsynchronousFileChannel类的文章。 我将在两周内深入分析新的JDK 7功能,并决定连续编号我的帖子。 只是为了确保我不会感到困惑:-)这是我关于Java 7的第七篇文章(我承认–碰巧–这也…

5页面title样式修改_认识html:实现网站页面是这么简单的一回事

互联网时代人们通过上网浏览信息,打开浏览器上网看到丰富的图文、视频、音乐等多媒体信息,一系列信息反馈和视觉冲击之后,您有没有想过,互联网这么发达的时代,您觉得花一点点时间学会做个网站页面不真香?概…

iOS指南针

前言: 这个小项目使用到了CoreLocation框架里面的设备朝向功能,对CoreLocation感兴趣的可以翻一下之前的文章 在另一个博客站有朋友发现一个尴尬的问题(图片的东西2个方向是不对的),原谅我的大意,赶时间就直…

OSGI –模块化您的应用程序

由于我是模块化,低耦合,高凝聚力等的大力拥护者,所以…… 我相信这项技术是我们使用Java平台创建应用程序的突破。 使用OSGi,创建高度可扩展的应用程序非常简单,例如参见Eclipse IDE。 我的目的不是要深入展示该技术的…

jq的链式调用.end();

jq的链式调用.end(); 先上code <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>li{list-style: none;width: 100px;height:20px;border:1px solid #ff0000;display: …

三、自定义视图、视图控制器

1.自定义视图 自定义视图&#xff1a;系统标准UI之外&#xff0c;自己组合而出的新的视图。在实际开发中&#xff0c;我们经常需要自己定义视图&#xff0c;积累自己的代码库。自己封装的视图&#xff0c;能像系统提供的UI控件一样用于多个项目中&#xff0c;这样可以提高我们的…