如何同步多个 git 远程仓库

摘要:
日常需求以前源码是托管在github的,现在想要同步托管在gitee,一做备份分发,二方便国内下载使用(网速可观),三防特色墙...方式一使用gitee的强制同步之前在github托管了这么一个项目mirrors-in-china,后来国内出了gitee,那么想着把项目同步一份到gitee,方便大家查看...正巧gitee提供强制同步功能,方便操作...我还是只用维护github那份源码,gite

日常需求

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

方式一 使用 gitee 的强制同步

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

如何同步多个 git 远程仓库第1张

我还是只用维护 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

有链接有真相:

比之前多个一次 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

有链接有真相:

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

总而言之

几种方式, 各取所需咯.

免责声明:文章转载自《如何同步多个 git 远程仓库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于WebGL架构的3D可视化平台—实现汽车行走路线演示用户空间缺页异常pte_handle_fault()分析--(上)【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

git日常提交冲突的处理

通常一般多人开发常见的场景,每天工作结束时提交下代码,保存下当日的工作(有些完成一半的代码可以先不传),但一般提交之前我们通常要用远程仓库的代码拉取下来,因为可能会和本地代码有冲突,此时执行 git pull , 可能就会看到下面的出错提示:     如上图,这说明本地代码中的project.config.json文件和远程仓库中的同名文件存在冲突,解决方...

.gitkeep

看一个开源项目中有个.gitkeep文件,不知道是干嘛用的查询知道git是不允许提交一个空的目录到版本库上的,可以在空的文件夹里面建立一个.gitkeep文件,然后提交去即可。其实在git中 .gitkeep 就是一个占位符。可以用其他 比如 .nofile等文件作为占位符。...

解决git 出现 Your account has been blocked问题

使用git 出现 Your account has been blocked 无法从远程pull代码下来, 解决方案如下: $ git push origin masterGitLab: Your account has been blocked.fatal: Could not read from remote repository. git 提交时出现...

GIT 保存日志并建立自己的分支

以下是我个人在工作中对git的愚见全是大白话说明。也是我踩坑记录吧,防止下次再次踩坑。 再已有的dev(开发分支)新建自己的分支 (featuer)在更新到gitlab 仓库中的过程。 首先要有大致的概念 本地 git init 是创建本地并初始化本地的git仓库,本地的仓库现在和线上的仓库是两个并行的仓库(也就是现在本地和线上没毛关系) 我先假定你已经安...

git打pach包

在开发中,我们发出的基线版本号常常会有一些bug须要修复,假设採用本地上库,然后再给用户新的版本号,可能会费时费力,而假设给用户我们改动后的代码让用户一行一行合入本地,也显的比較落后,假设用户那边也使用git管理版本号的话,我们能够用一个简单的方法来给用户发送改动,那就是使用git打pach包; 1、进入到git 文件夹下,使用 git diff 差异文...

ubuntu下git更改默认编辑器

ubuntu下使用git提交代码时,git commit时默认的编辑器是nano,这个编辑器实在是太恶心了,用惯了vim,所以如果修改默认编辑器,可以这样解决: 编辑.git/config,在core这块,加入editor = vim,嗯,这下舒服多了,走路也精神了...