为多个工作场所同步 Mercurial 存储库的实际版本

Synchronizing actual version of Mercurial repository for multiple workplaces

我有三个不同的 Linux 工作场所,每个工作场所都有不同的计算机。每次我从一个工作场所转移到另一个工作场所时,我都需要同步一个存储库以保持最新版本的编码。您始终可以提交并推送到 bitbucket,然后从另一台计算机上拉取,但这不是提交的目的。

其他类似的帖子没有帮助,例如 Synchronizing a collection of Mercurial repositories

有什么建议吗?

在存储库之间交换临时工作的两个主要选项是 Mercurial 队列和 evolve extension

Mercurial 队列的文档相当广泛 here。要将它们用于您的目的,您必须将补丁置于版本控制之下(在本章底部附近解释),然后可以将它们 to/pull 从共享补丁存储库中推送。请注意,这本书已有几年历史,Mercurial 在此期间添加了一些方便的功能。现在,您可以直接通过 --mq 选项(例如 hg init --mqhg commit --mqhg push --mq)对补丁存储库进行操作,而不需要 bash 为方便起见的别名。

进化可能更直观;它为共享可变历史提供了一种相当直接的方法。您可以在一个存储库中提交更改,将更改推送到共享存储库,从另一个存储库中拉取并取消提交或更改它们,然后将它们推回。

为了进行设置,您需要在某处声明为 non-publishing 的共享存储库。您可以通过将以下行添加到其 .hg/hgrc:

[phases]
publish = False

这可以防止通过此存储库交换的变更集变为 public(此时,它们将变得不可变)。

您还需要先安装扩展(与 MQ 不同,它是核心 Mercurial 的一部分)。

请注意,Bitbucket 目前不支持过时标记,这对于变更集演变的功能至关重要,因此您需要在不同的地方托管共享存储库。进化功能不是通过删除过时的变更集,而是通过将它们标记为过时并隐藏它们(过时标记还跟踪新旧变更集的相关程度)。因为 Bitbucket 不支持这些标记,过时的变更集如果被推到那里将再次可见。 (请注意,您仍然可以在本地或在具有进化意识的存储库之间使用进化,并使用 Bitbucket 来处理 public 东西。)

方式略有不同:

  1. 手工
    • MQ 与 MQCollab extension
    • 使用 MuliRepo extension 提交 "classic" 回购之间的交换(只是不要忘记 hg pull 在每个工作场所之前拉 - 并将所有远程回购添加到 [multirepo] 部分在每个工作场所)
  2. 自动化方式