首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用两个没有连接的中央服务器同步汞储存库

用两个没有连接的中央服务器同步汞储存库
EN

Stack Overflow用户
提问于 2015-12-09 10:29:10
回答 2查看 315关注 0票数 1

我对mercurial很陌生,而且我对我们公司正在努力实现的解决方案也有问题。我在一个实验室工作,有一个严格的安全环境,生产汞服务器是在一个孤立的网络中。所有人都有两台电脑,一台在“现实世界”工作,另一台在与世隔绝和安全的环境中工作。

问题是,我们有其他实验室分布在世界各地,在某些情况下,我们需要合作两个或更多的实验室在一个项目。每个实验室都有一个HG服务器,用于在本地管理自己的项目,但我不确定我们同步公共项目的方法是否是最好的解决方案。为了解决这个问题,我们使用一个“包”将新闻变更集从一个实验室发送到另一个实验室。我的问题是这个方法有多好,因为这个解决方案有点复杂。程序或多或少是这样的:

  • 在B实验室,hg拉和更新,以确保在本地文件夹中的最后一个版本。询问另一个关于"hg日志“的内容,看看最后一个常见的变更集是什么。
  • 在实验室A: hg拉和更新,以确保在本地文件夹的最后一个版本。
  • 在Lab : Make中,"hg base XX project.bundle“(其中XX是最后一个常见的变更集)。
  • 将其发送到B实验室(由于安全性规范,使用了一种复杂的方法:加密文件、加密驱动器、安全擦除等)。
  • 在B实验室中:本地文件夹中的"hg解包projectYY.bundle“。
  • 这个过程会产生两个头部,有时会迫使你进行合并。
  • 一旦实验室A的变更集在B实验室得到正确的实现,我们需要向相反的方向重复这个过程,以实现B实验室项目向A实验室的演变。

有谁能启发我找到解决这个困境的最佳方法吗?有人有更好的解决方案吗?

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-12-09 21:39:36

捆绑包是在没有直接连接的情况下传播更改的正确工具。但是,您可以通过在本地建模通信来简化构建包的过程:

  • 在实验室A中,维护repoA (本地使用的中央回购)以及repoB,后者表示实验室B中存储库的状态。

您可以使用这种双重设置来模拟实验室之间的关系,就好像您有一个直接的连接一样,但是变更集通过包而不是推/拉来共享收益。

  • 从Lab的角度来看:用常规的方式更新repoA,但是只通过从B实验室接收到的包和发送给B的包(或变更集)更新repoB。

更具体地(同样从A实验室的角度):

  1. 在开始时,repos是同步的,但是随着开发的进展,更改只提交给repoA。
  2. 当是时候让B实验室跟上速度时,只需到repoA运行hg outgoing path/to/repoB即可。现在您已经知道了在不需要请求和研究B实验室的日志的情况下应该捆绑什么。实际上,hg bundle bundlename.bzip repoB将为您绑定正确的变更集。
  3. 加密并发送你的包裹。
  4. 您可以假设包将集成到Lab的home repo中,因此也可以通过直接推送或(为确保一致性)解压缩(导入)邮寄的包来更新我们的本地repoB。
  5. 当实验室B接收到包时,他们会将其导入到自己的repoA副本中--它现在被更新到与实验室A中的repoA相同的状态。B实验室现在可以将更改推入或拉到自己的repoB中,并将它们(在repoB中)与它们自己的未共享的变更集合并。这将生成一个或多个合并变更集,它们就像B实验室的repoB的任何其他签入一样被处理。

就是这样。当实验室B将一个包发送回实验室A时,它将使用相同的过程,步骤1至5。一切都保持同步,就像存储库直接连接时一样。和往常一样,经常同步是值得的,以避免分歧太远,并遇到合并冲突。

事实上你有两个以上的实验室。保持它们同步的方法是相同的,就像您有一个直接连接:您想要一个中央服务器的“星型拓扑”吗?中央服务器是其他实验室直接与之通信的唯一节点吗?那么每个实验室只需要这台服务器的本地副本。在与大家分享一些工作之前,你是否需要大量的双边沟通?然后,为您想要交换的每个实验室保留一个本地模型。

票数 2
EN

Stack Overflow用户

发布于 2015-12-09 11:15:28

如果两个汞存储库之间没有直接的网络通信,那么您描述的方法似乎是同步这两个存储库的最简单方法。

在获得需要捆绑的新变更集时,您可能会在流程样板上节省一点,具体取决于什么。

这一次,您不需要为了创建包而更新您的工作副本;只需要回购就足够了,您不需要一个工作副本。

如果您知道上一次同步的日期和时间,您可以使用适当的修改(例如,自今年3月30日以来的所有修订)将自那时以来添加的所有变更集捆绑在一起:hg log -r'date(">2015-03-30")',因此您可以跳过冗长的手动评审过程。

如果您的存储库不太大(因此适合您用于交换的媒体),只需将其完整复制到那里,并从该交换磁盘中进行本地提取以同步,也跳过这些评审过程。

当然,你也无法避免合并--当几个人同时在同一件事情上工作,并且都致力于他们自己的回报时,他们是你必须付出的代价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34176470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档