git gui fetch不到文件_如何同步多个 Git 远程仓库

点击上方 好好学java ,选择 星标 公众号

重磅资讯、干货,第一时间送达ba0fa082867088954b21ebe78ef1ef0e.png

今日推荐:你用什么软件做笔记?

个人原创+1博客:点击前往,查看更多  

作者 | taadis

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

日常需求

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

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

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

95081f9f7b4d2ac606a50872e58786a9.png

我还是只用维护 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 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 --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 同步推送和分发

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

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

6c2978b43bfa76c2382ad35d76ab7671.png

更多Java技术文章,尽在【好好学java】网站。

网址:www.java1000.com  

搜索 好好学java  阅读原文 可达!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值