1

我正在尝试为远程团队创建一个捆绑包。他们有一份来自 892 版的仓库副本,而我们目前正在使用 1119 版。

首先我尝试了补丁,但是在尝试应用它们时创建了大量文件(通常在合并提交时)......而且我们的存储库大小为 17GB,所以我正在尝试创建一个增量补丁,因此认为 hg bundle 非常适合这个。

我通过以下方式生成了一个包:

>hg bundle --rev 1119 --base 892 depot-892-to-1119.bundle

这创建了一个 350MB 的捆绑文件,这是可以接受的并且感觉不错。

但是,当我们将它应用到仅适用于修订版 892 的目标仓库时,它会出现以下问题:

E:\dest-depot>hg unbundle -u depot-892-to-1119.bundle
adding changesets
transaction abort!
rollback completed
abort: 00changelog.i@e5cc33458251: unknown parent!

到目前为止,这与我在搜索时看到的其他几个问题相似,但我会更进一步。

我在源代码(更大的仓库)中查找了 e5cc33458251,它显示为修订版 930,这显然在 rev 892 之后,但指定这是失败的原因。当然,目的地仓库没有修订版。这就是我首先创建捆绑包的原因......所以我不确定为什么这个包会给我带来问题。

现在我们在软件仓库中确实有许多分支,并且 rev 892 被提示为“Patch 2.7”分支而不是默认分支。我不知道这是否会导致问题。最终,该补丁分支在 rev 999 中被合并回默认值。

930 实际上是对代码的一个非常小的和微不足道的更改,并且也在“Patch 2.7”分支中。修订图中实际上有 2 条 Patch 2.7 行,它们在 932 中合并在一起。但同样,没什么奇怪的。

我在这里没有看到问题。关于我应该生成什么样的捆绑包的任何想法?或者如果我应该走另一条路?

4

1 回答 1

3

听起来你这样做基本上是正确的,所以让我们检查一些可能的问题:

您是否知道修订号不能跨克隆移植?“他们的”892 完全有可能与您的不同。因此,您应该通过 nodeid 找出他们的最新版本,并将其用作 base 的参数。

我知道他们是远程使用 hg 的内部协议来实际传输数据可能不可行,但如果你能让他们站起来hg serve一会儿,你可以这样做:

hg bundle ../depot-to-them.bundle http://THEIR_IP:8000

然后,您将拥有完全正确的捆绑包,可以让他们获得所需的一切,而无需让他们向您发送他们的 nodeid。

除了可能值得一提的唯一其他信息之外,--rev X --base Y您说的是“我想发送他们没有的所有 X 祖先,如果他们只有 Y 及其祖先的话”,所以如果有一个尚未合并到 X 中的分支,即使本地修订号在 X 和 Y 之间,您也不会发送它。但这不会阻止应用包,所以它更像是一个好 -去理解而不是你的麻烦的可能原因。

于 2013-10-07T23:30:27.773 回答