专栏首页java思维导图如何同步多个 git 远程仓库

如何同步多个 git 远程仓库

日常需求

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

  • 方式一 使用 gitee 的强制同步

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

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

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

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

  • 方式二 手搓 push 多次

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

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

$ git remote --verboseorigin  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 --verbosegiteeorigin  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 mastergit push -u giteeorigin master

有链接有真相:

github: add giteegitee: add gitee

比之前多个一次 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 --verboseorigin  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: github & gitee 同步推送和分发gitee: github & gitee 同步推送和分发

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

  • 总而言之

几种方式, 各取所需咯.

本文分享自微信公众号 - java思维导图(java-mindmap)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速了解 Git 仓库

    (1)Git是一个开源(Linus Torvalds 为了帮助管理 Linux 内核开发而开发)的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,与常...

    java思维导图
  • Git 从入门到精通,这篇包教包会!

    集中化的版本控制系统,诸如 CVS,Subversion 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器...

    java思维导图
  • 一篇文章,教你学会Git

    在日常工作中,经常会用到 Git 操作。但是对于新人来讲,刚上来对 Git 很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触 Git 的新人,理解 Git ...

    java思维导图
  • git基础命令

    修改之后,需要git add 文件名之后,再 git commit -m "修改提交"。

    崔笑颜
  • 如何同步多个 Git 远程仓库

    链接 | https://my.oschina.net/taadis/blog/3073220

    好好学java
  • 一个小时学会Git

    最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统。在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本...

    张果
  • git使用教程2-更新github上代码

    前言 前面一篇已经实现首次上传代码到github了,迈出了装逼第一步,本篇继续讲如何把本地更新的代码同步更新到github上 一、clone代码 1.把大神的代...

    上海-悠悠
  • Git系列之查看状态

    本节来说下 Git 的状态,在日常开发中我们每天都在提交自己的文件到仓库中,有时会存在我们写了很多的功能,都是提交到了缓存区,而没有想仓库内提交,或者我们新增了...

    申霖
  • git schnnel failed to receive handshake, SSLTLS connection failed

    C:\Code\git>git p fatal: unable to access ‘https://github.com/i042416/KnowlegeR...

    Jerry Wang
  • 一个小时学会Git

    最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统。在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本...

    张果

扫码关注云+社区

领取腾讯云代金券