专栏首页好好学java的技术栈如何同步多个 Git 远程仓库

如何同步多个 Git 远程仓库

作者 | taadis

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

日常需求

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

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

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

我还是只用维护 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: add gitee
  • gitee: 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 --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: github & gitee 同步推送和分发
  • gitee: github & gitee 同步推送和分发

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

总而言之,几种方式, 各取所需。

本文分享自微信公众号 - 好好学java(SIHAIloveJAVA),作者:taadis

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

原始发表时间:2019-11-26

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Git 常用命令总结

    好好学java
  • 用 Git 和 Github 提高效率的 10 个技巧!

    作者:张伯函 来源:segmentfault.com/a/1190000003830252

    好好学java
  • 十分钟了解 git 那些 “不常用” 命令

    链接:https://segmentfault.com/a/1190000022107836

    好好学java
  • git/github 笔记

    2016-1-9 创建github repos并提交修改 在[这里](https://github.com/new)创建一个repos, 进入终端,cd到一个...

    梦里茶
  • 个人网站转到云服务器上

    用命令yum install -y nginx git安装git,安装完后分别输入git --version、nginx -v,出现相应#版本号即为安装成功。#...

    项勇
  • 如何在IntelliJ IDEA 中使用 Git ?你会没...

    Git是目前流行的分布式版本管理系统。它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响。也因此其近乎所有的操作都是本地执行,...

    Java编程指南
  • CentOS/RHEL 7/6 安装最新Git

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean
  • git 常用命令

    有些情况下,通过 git status 能查到某些文件有变化,但使用 git diff 却看不到修改的内容。可以使用下面的面试查看变化。

    音视频_李超
  • 1-git的安装和基本使用https://gitee.com/

    说一下,我希望都要会用git,git很好用, 代码管理,多人合作开发一个项目,版本记录等等

    杨奉武
  • git push 错误:failed to push some refs to

    韦弦zhy

扫码关注云+社区

领取腾讯云代金券