将Mercurial存储库与两台中央服务器同步,无需连接
我是mercurial的新手,我对我们公司正在实施的解决方案有问题。我在一个具有严格安全环境的实验室工作,Mercurial生产服务器位于一个隔离的网络中。所有人都有两台计算机,一台在“真实世界”中工作,另一台在隔离和安全的环境中工作 问题是我们有其他分布在世界各地的实验室,在某些情况下,我们需要在一个项目中与两个或多个实验室合作。每个实验室都有一个HG服务器,用于在本地管理自己的项目,但我不确定我们同步公共项目的方法是否是最佳解决方案。为了解决这个问题,我们使用“捆绑包”将新闻变更集从一个实验室发送到另一个实验室。我的问题是这个方法有多好,因为解决方案有点复杂。程序大致是这样的:将Mercurial存储库与两台中央服务器同步,无需连接,mercurial,synchronization,distributed,Mercurial,Synchronization,Distributed,我是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
hg outgoing path/to/repoB
。您现在知道了无需请求和研究实验室B的日志就可以打包什么了。事实上,hg bundle bundlename.bzip repoB
将为您绑定正确的变更集事实上,你有两个以上的实验室。保持它们同步的方法与直接连接的方法是一样的:您是否想要一个“星形拓扑”,其中的中央服务器是其他实验室直接通信的唯一节点?那么每个实验室只需要此服务器的本地副本。在与每个人分享某些工作之前,你是否需要大量的双边沟通?然后为您想要交换变更集的每个实验室保留一个本地模型。隔离网络-好的,但它也不会回答“您可以从安全的工作场所物理对象移动到吗?”的问题。使用两个不同的遥控器在U盘上克隆