Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Mercurial存储库与两台中央服务器同步,无需连接_Mercurial_Synchronization_Distributed - Fatal编程技术网

将Mercurial存储库与两台中央服务器同步,无需连接

将Mercurial存储库与两台中央服务器同步,无需连接,mercurial,synchronization,distributed,Mercurial,Synchronization,Distributed,我是mercurial的新手,我对我们公司正在实施的解决方案有问题。我在一个具有严格安全环境的实验室工作,Mercurial生产服务器位于一个隔离的网络中。所有人都有两台计算机,一台在“真实世界”中工作,另一台在隔离和安全的环境中工作 问题是我们有其他分布在世界各地的实验室,在某些情况下,我们需要在一个项目中与两个或多个实验室合作。每个实验室都有一个HG服务器,用于在本地管理自己的项目,但我不确定我们同步公共项目的方法是否是最佳解决方案。为了解决这个问题,我们使用“捆绑包”将新闻变更集从一个实验

我是mercurial的新手,我对我们公司正在实施的解决方案有问题。我在一个具有严格安全环境的实验室工作,Mercurial生产服务器位于一个隔离的网络中。所有人都有两台计算机,一台在“真实世界”中工作,另一台在隔离和安全的环境中工作

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

  • 在实验室B中,hg拉取并更新以确保本地文件夹中的最后版本。 询问另一个关于“hg日志”的问题,看看最后一个常见的变更集是什么
  • 在实验室A:hg拉取并更新,以确保本地文件夹中的最后版本
  • 在实验室A中:生成bundle,“hg bundle--base XX project.bundle”(其中XX是最后一个公共变更集)
  • 将其发送到实验室B(由于安全规范,使用复杂的方法:加密文件、加密驱动器、安全擦除等)
  • 在实验室B中,本地文件夹中的“hg unbundle projectYY.bundle”
  • 这个过程会产生两个头部,有时会迫使您进行合并
  • 一旦实验室A的变更集在实验室B正确实施,我们需要以相反的方向重复该过程,以实现从实验室B到实验室A的项目演变
有人能告诉我如何找到摆脱困境的最佳解决方案吗? 谁有更好的解决方案


非常感谢您的帮助。

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

在获取需要绑定的新变更集时,您可能会在流程样板上节省一点时间,具体取决于绑定的方式

这一次,您不需要为了创建包而更新工作副本;只要有回购协议就足够了,你不需要工作副本


如果您知道上次同步的日期和时间,您可以使用适当的修订集(例如自今年3月30日以来的所有修订版)简单地捆绑自该时间以来添加的所有变更集:
hg log-r'date(“>2015-03-30”)
,这样您就可以跳过冗长的手动审查过程

如果您的存储库不太大(因此适合您用于exchange的介质),只需将其全部复制到该存储库中,然后从该exchange磁盘执行本地拉取以进行同步,也可以跳过这些审阅过程


当然,您将无法避免进行合并-当几个人同时处理同一件事情,并且都承诺自己的回购协议时,您必须支付合并的价格。

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

  • 在实验室A中,维护repoA(供本地使用的中央repo)以及repoB,后者表示实验室B中存储库的状态。实验室B有一个补充设置
您可以使用这种双重设置来模拟实验室之间的关系,就像您有一个直接连接一样,但是变更集共享是通过捆绑包而不是推/拉进行的

  • 从实验室A的角度来看:以常规方式更新repoA,但仅使用从实验室B收到的捆绑包和发送到实验室B的捆绑包(或变更集)更新repoB
更具体地说(同样从实验室A的角度):

  • 在一开始,repo是同步的,但随着开发的进行,更改只提交给repoA

  • 到了让lab B加速的时候,只需转到repoA并运行
    hg outgoing path/to/repoB
    。您现在知道了无需请求和研究实验室B的日志就可以打包什么了。事实上,
    hg bundle bundlename.bzip repoB
    将为您绑定正确的变更集

  • 加密并发送您的包

  • 您可以假设捆绑包将集成到Lab B的home repo中,因此也可以通过直接推送或(为确保一致性)拆分(导入)寄出的捆绑包来更新本地repoB

  • 当实验室B收到捆绑包时,他们会将其导入到自己的repoA副本中——它现在更新到与实验室A中的repoA相同的状态。实验室B现在可以将更改推送到或拉到自己的repoB中,并将它们(在repoB中)与自己的非共享更改集合并。这将生成一个或多个合并变更集,这些变更集的处理方式与实验室B的repoB的任何其他签入方式相同

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


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

    隔离网络-好的,但它也不会回答“您可以从安全的工作场所物理对象移动到吗?”的问题。使用两个不同的遥控器在U盘上克隆