始终保持 git 镜像同步

2023-12-24

我有几个使用 Drupal 的网站,我有几个服务器,live、dev1、dev2...

Drupal 的代码库存储库很大(112Mb),所以我热衷于充分利用 git 的硬链接功能,这样每次我添加一个站点时都不会重复它。

因此,比如说,我的实时服务器有一个裸露的主存储库,而我的所有站点都是它的克隆,每个站点都使用不同的分支。这在一台服务器上非常棒,使用硬链接,快速高效。

但在我的开发服务器上,它们通常都是从裸主存储库克隆的,这意味着同一台计算机上的两个站点不能使用硬链接来节省空间。

我想做的是在我的每台开发服务器上设置裸存储库的镜像,然后从中进行克隆。

dev1$ git clone --mirror live:master-bare-repo  dev1-mirror-repo
dev1$ git clone -b site1 dev1-mirror-repo site1
dev1$ git clone -b site2 dev1-mirror-repo site2

到目前为止一切都很好。但我希望镜子始终保持同步。所以我用了接收后挂钩 http://git-scm.com/book/en/Customizing-Git-Git-Hooks在 dev1 的镜像上要做的事git push --mirror origin。现在,如果 dev1 上的 site1 推送提交,它们会神奇地推送到 master-bare-repo。

But如果我做出改变怎么办live服务器,并推送那个?我无法设置post-receive钩子推送到其他人,因为这可能会触发their post-receive哪些钩子最终会递归?

有什么聪明的方法可以解决这个问题吗?


首先,你不会以递归结束,因为当“一切都是最新的”时,接收后挂钩不会执行(如这另一个问题 https://stackoverflow.com/questions/10878495/git-post-receive-hook-for-everything-up-to-date),这将是以下结果pushes从镜像到实时服务器。

另一方面,这并不是可扩展设计的全部(每次添加新镜像时,您都需要更改实时服务器的挂钩以添加要推送的站点)。您可能会发现在镜像中使用“惰性”同步策略更加优雅:当它们收到推送时,它们不仅推送到主服务器,而且在此之前它们从主服务器获取/拉取。这样你就不需要在主服务器中设置钩子,同步策略将完全由镜像管理。此策略的缺点是,您最终可能希望对实时服务器进行更改,并在镜像需要推送任何更改之前将其传播到镜像。因此,您必须考虑对主控的更改对于补偿可扩展性的权衡是否如此重要。当然,使这种“可扩展”设计也“可同步”的补丁是使用外部 cron 作业定期检查 master 中的更改,如评论中所建议的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

始终保持 git 镜像同步 的相关文章

  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • GIT:以下未跟踪的工作树文件将被签出覆盖

    我有两个分支 一个称为 master 另一个称为 dev 我目前位于 master 分支 我想转到 dev 分支将文件移动到开发服务器 但是当我执行 git checkout dev 我收到消息 以下未跟踪的工作树文件将被覆盖 查看 pag
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • 当 .gitattributes 中的 EOL 设置为 CRLF 时,Git diff 认为行结尾为 LF

    当我恢复对带有 Windows 行结尾的文件的更改并且 gitattributes 将 EOL 定义为 CRLF 时 git 认为行结尾已更改为 LR 即使十六进制编辑器显示 CRLF 仅当 gitattributes 定义 EOL 字符时
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • 显示 master 之前/之后有多少提交分支的别名

    新的 Bitbucket Branches 页面非常棒 它显示每个分支领先 落后于 master 的提交数量 是否有显示相同信息的 Git 别名 信息应显示 分店名称 上次更新是什么时候 其背后有多少提交 有多少提交领先于 master 看
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • Git 工作流程:分叉项目并维护本地修改副本,但保持最新

    我正在尝试找出最佳工作流程 用于维护具有自定义功能的 github 托管项目 moodle 的本地副本 同时保持保持副本最新的能力 告诉我我正在考虑做的事情是否完全疯狂 分叉项目 github com moodle moodle gt gi
  • 如何诊断和修复 git fatal: 无法读取树

    我在用着git管理项目上的文件 并不断遇到这个问题 当我跑步时git status我收到消息 fatal unable to read tree e2d920161d41631066945a3cbcd1b043de919570 据我了解 我
  • 在我的例子中,GIT 添加恢复(保留更改)

    在我对文件进行更改之后 我用git add FILE NAME 然后 我想将其恢复为未添加但与此同时保留更改 这个怎么做 git reset FILE NAME会做的 See the git reset manual https git s
  • 为什么“git pull”在我的网络服务器上失败?

    我使用 git 来提取站点代码库的更改 文件内部的更改和文件删除是有效的 但是 当我将新文件或目录 不是空的 添加到存储库时 它不会被本地拉到网络服务器 拉动时不会显示错误消息 但在检查该文件时 它不在那里 在线的 bitbucket re

随机推荐

  • 如何在 Laravel 中模拟 DB 门面?

    我正在编写单元测试 默认情况下它们不应访问数据库 按照一般规则 我总是使用 eloquent 来获取结果 但一些更复杂的查询我必须使用原始数据库 我有这个功能 public function GetPassword email result
  • Google DFP - 从内部调整 SafeFrame 自定义广告素材外部 Iframe 容器的大小(展开广告)

    我正在寻找解决方案 可以从 Google DFP 广告管理系统的自定义广告素材内部扩展 SafeFrame 自定义广告 这是否可能 有两种可能的解决方案 1 使用SafeFrame API pros 你可以 开箱即用 使用它 您可以在任何网
  • Laravel Cashier + Stripe:没有这样的客户

    我正在使用 Laravel Cashier 和 Stripe 开发 Web 应用程序的订阅 我正在使用 Stripe v3 JavaScript API 并使用卡片元素生成 Stripe 令牌 Stripe 令牌正在生成 如果您在 Stri
  • 将 TeamCity 构建配置从一台服务器导入/导出到另一台服务器

    将单个 TeamCity 构建配置从一台服务器移动到另一台服务器的最佳方法是什么 我有一个 TeamCity 本地实例 我在该实例上进行测试 然后 当构建足够成熟时 我在我们的主 TeamCity 服务器上手动创建它 眼球复制 是否有导出和
  • 静态内部类中的主要方法。?

    我了解到 Java 文件中唯一的公共类也必须具有 main 方法 但是 下面您可以看到内部类中的 main 方法吗 源文件中 main 方法定义的规则是什么 public class TestBed public TestBed Syste
  • 如何从 Node.js 调用 Python 函数

    我有一个 Express Node js 应用程序 但我也有一个可在 Python 中使用的机器学习算法 有没有办法从 Node js 应用程序调用 Python 函数来利用机器学习库的强大功能 我知道的最简单的方法是使用与节点一起打包的
  • 更改 ScrollBar 末端按钮的背景颜色

    在Java中 我一直在研究如何更改滚动条末端按钮的背景颜色 我还没有找到解释如何操作的网站 并且我还查看了 UIManager 默认值以尝试查找某些内容 但我找不到任何内容 因此 如果有人能告诉我如何更改滚动条上按钮的背景颜色 我将非常感激
  • 如何对数据框中具有特定值的所有行进行子集化

    我有一个大型数据集 其中每行包含 NA 1 和 2 的不同组合 我想对仅包含 2 和 NA 的所有行进行子集化 因此 在下面的示例中 我想自动命名 Row1 和 Row4 并为其设置子集 df lt data frame Col1 c NA
  • JavaScript 中 ' 和 " 有什么区别?

    I saw 这个问题 https stackoverflow com questions 943795 difference between and我想知道 JavaScript 中同样的事情 如果在 JavaScript 中创建字符串时使
  • DOCX 和 PDF 的版本控制?

    我一直在玩git and hg最近 我突然想到这种东西对于文档来说非常有用 我有一个在 DOCX 中编辑并导出为 PDF 的文档 我尝试同时使用git and hg对它进行版本控制 结果是hg您最终只跟踪二进制文件 并且比较没有意义 虽然与
  • jquery 可拖动可放置 删除已放置

    如何从购物车中删除该商品 当然 您希望能够将项目拖放回去 function catalog accordion catalog li draggable appendTo body helper clone cart ol droppabl
  • ChromeCast 的 Java API

    有没有办法使用标准 桌面 Java 连接到 ChromeCast 我正在寻找一种自动化测试的方法 并希望我们的 CC s 自动播放视频 到目前为止我已经找到这个项目 https github com vitalidze chromecast
  • 需要两个键来获取唯一值的集合

    我想知道是否有人知道存储数据的好方法 以便使用两个键对其进行索引 基本上 我需要类似表格的东西 顶行是 key1 左列是 key2 字母是从索引返回的值 1 2 3 4 1 A B C D 2 B E F G 3 C F H I 4 D G
  • 使用 python 修剪网络摄像头的实时视频(从中删除帧)

    我有一个捕获视频流的网络摄像头 30 秒后 我想从开始处删除 1 秒的视频 并继续捕获视频流等等 简而言之 我只想保存直播视频的最新30秒 OpenCV不提供视频处理 ffmpeg 修剪视频但创建一个新的输出文件 我不想保留副本 Creat
  • 由于本地存储库问题,Mac 版 GitHub 在打开时崩溃

    我试图弄清楚为什么当我选择本地存储库时 我的 GitHub for Mac 在启动时崩溃 我从克隆的文件夹中添加了这个本地存储库 不幸的是 我正在使用 git 命令行 我一定做了一些事情来破坏本地 存储库 现在 我的 GitHub for
  • ASP.Net - 使用 Repeater 在客户端重复输入框

    我对在应用程序中创建用户配置文件有以下要求 用户应该能够在其个人资料中输入多个电话号码 电子邮件地址 屏幕看起来有点像这样 默认情况下 页面加载时会显示电话和电子邮件的单个文本框 用户可以单击 按钮添加其他号码 地址 单击 按钮后 我们需要
  • Azure Functions Core Tools 无法安装绑定所需的扩展

    我正在尝试在本地运行 Azure 函数 JavaScript 但失败了func start出现以下错误 AddConfig 绑定类型 表 未注册 请确保类型正确并安装绑定扩展 请注意 我已经成功安装了先决条件 这些先决条件在当时或写作时是
  • 当我在 C++ 中使用 auto bi = 123456789 时,它总是分配为 int 吗?

    如果我想让 bi 成为long int 不可能使用 auto 因为它总是分配为 int 吗 一些选项 auto bi 123456789 const char auto bi2 12345 int auto bi3 123456789 in
  • 使用 Windows API 写入和读取 Windows 注册表

    我正在尝试从 Windows 注册表中写入读取内容 写作 std string path c LPCTSTR str data TEXT path c str auto size static cast
  • 始终保持 git 镜像同步

    我有几个使用 Drupal 的网站 我有几个服务器 live dev1 dev2 Drupal 的代码库存储库很大 112Mb 所以我热衷于充分利用 git 的硬链接功能 这样每次我添加一个站点时都不会重复它 因此 比如说 我的实时服务器有