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

技术文章第一时间送达!

作者:taadis

my.oschina.net/taadis/blog/3073220

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

日常需求

以前源码是托管在 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:

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 --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:

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图文版!

看到这里了,关注一个?

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

  1. git push 的符号笔有什么用_Git 标签(tag)作用、分支区别及常用命令

    Git 跟其它版本控制系统一样,可以对某一时间点上的版本打上标签.在做版本发布的时候经常会用到.尽管 Git 只实现了一种标签对象,但是有两种基本的标签类型,通常称为轻量级的(lightweight) ...

  2. git push 的符号笔有什么用_Git自救指南(一)——工欲善其事,必先利其器,基本概念概览...

    虽然大家肯定都知道这两个概念,但是还是要先说两句废话的-- Git -> 分布式版本控制系统,用来记录一个或者多个文件的变化. GitHub -> 代码托管中心,用来提供Git服务的地方. ...

  3. git学习-如何将本地项目上传(同步)到github远程仓库

    初学github想要把自己做过的online judge题解上传到github上去.有两种方法, 一,直接在github网页上完成创建代码文件并编写,比较容易. 二,是本地编写完代码,放到本地仓库,然 ...

  4. git push 到github时,报错:ERROR: Permission to xxx.git denied to sb.

    从github上新clone一个项目,修改后,push新代码,报错如下: ERROR: Permission to xxx.git denied to sb. fatal: Could not rea ...

  5. 输入‘git push origin master‘不弹出账号密码输入框?(把本地Git中的代码push到Github中)

    注意:         Github从 2021 年 8 月 13 日开始,在 GitHub.com 上对 Git 操作进行身份验证时,将不再接受帐户密码,改用tokens验证. 点此查看官网公告   ...

  6. git url地址无效_如何同步多个 git 远程仓库

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

  7. git push 报错Push rejected、 remote unpack failed 、unpacker error、 failed to push some refs to

    git push 报错Push rejected. remote unpack failed .unpacker error. failed to push some refs to 1.error: ...

  8. Git分支操作与远程仓库的使用

    Git分支操作 本地仓库 创建分支 合并分支 删除分支 远程仓库 push 推送远程分支 pull 拉取远程分支 fetch 更新远程分支 本地分支与远程分支的跟踪关系 本地仓库 由于Git的分布式特 ...

  9. Git将本地项目推送到远程仓库

    第一步:我们需要在自己电脑中创建一个空白文件夹,这个功能就是创建一个本地的版本库. 第二步:进入test文件夹,在根部执行Git Bash Here. 第三步:通过命令git init把这个文件夹变成 ...

最新文章

  1. VMTK学习——01.入门
  2. curl 请求日志_kong api网关日志 将请求和响应数据附加到磁盘上的日志文件中
  3. aws s3 python_Python 操作amazon s3 | 学步园
  4. [转]wchar_t char std::string std::wstring CString 转换
  5. java命令行执行编译好的类_Java命令行编译并执行Java程序
  6. verilog 3段式状态机
  7. Pycharm画图中文显示报错:UserWarning: Glyph 20013 (\N{CJK UNIFIED IDEOGRAPH-4E2D}) missing from current font.
  8. c语言启动程序句柄无效,win7系统玩英雄联盟突然弹出“句柄无效”窗口的解决方法...
  9. 体系结构14_控制相关的动态解决技术
  10. android系统 通知管理,告别打扰 Android系统的通知管理
  11. 饥荒联机版服务器搭建_饥荒联机版(Don't Starve Together)专用服务器搭建教程
  12. CVE-2021-42287、CVE-2021-42278域内提权漏洞
  13. Android App签名
  14. html5的video在IOS端默认全屏和黑屏问题
  15. MySQL如何修改主键
  16. 太硬核了,我写了一份操作系统词典送给你!
  17. 常用的图像质量评估方法
  18. C/C++使用ODBC连接MSSQL数据库
  19. SAP采购中基于收货的发票校验应用逻辑及控制
  20. 程序员如何写一份更好的简历

热门文章

  1. echarts 卡_图表太丑怎么破,ECharts神器带你飞!
  2. UTF-8和GBK有啥区别?
  3. 【APICloud系列|11】使用APPuploader申请ios开发证书及ios发布证书教程
  4. linux ssh无需密码,linux下 ssh 实现无需密码的远程登陆
  5. java集成_Java继承
  6. java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)
  7. sass 基础——回顾
  8. HTML5 参数传递
  9. 阅读react-redux源码 - 零
  10. DataFrame.to_dict(orient='dict')英文文档翻译