2013-10-07 69 views
0

我正在尝试为远程团队创建捆绑包。他们有修订版892的软件仓库的副本,我们目前正在修订版本1119.hg捆绑不起作用

首先,我尝试了补丁程序,但是创建了大量试图应用它们(通常在合并提交)时出现错误的文件。 ..和我们的存储库是17GB的大小,所以我试图创建一个增量补丁,因此计算出的hg捆绑对此是完美的。

我生成经由管束:

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

这创造束文件,它是350MB,这是可接受的,并且很有前景。

但是,当我们把它应用到目标软件仓库,只有去修订892它barfs上:

E:\dest-depot>hg unbundle -u depot-892-to-1119.bundle 
adding changesets 
transaction abort! 
rollback completed 
abort: [email protected]: unknown parent! 

到目前为止这类似于搜索时我已经看到了其他一些问题,但我我们会更进一步。

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

现在我们确实在仓库中有多个分支,并且rev 892被放在“Patch 2.7”分支上,而不是默认分支。我不知道这是否会导致问题。最终该修补程序分支在rev 999被合并回默认值。

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

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

回答

1

这听起来像你这样做基本上是正确的,所以让我们检查了几个可能的陷阱:

你知道,修订版本号是不能跨克隆移植? “他们”的892完全可能与你的不同。所以你应该通过nodeid找出他们的最新版本,并用它作为参数。

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

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

然后,你将拥有完全正确的捆绑包,让他们得到他们需要的一切,而不必让他们发送你的节点。

除了那些可能值得一提的信息的唯一其他信息外,就是通过使用--rev X --base Y,你会说“我想发送所有X的祖先,如果他们只有Y和它的祖先, “,所以如果有一个分支还没有被合并到X中,那么即使在本地版本号在X和Y之间,也不会发送它。但是,这不会阻止该分发包被应用,所以它是更多的是一个很好的理解,而不是你的烦恼的可能原因。

+0

是的,的确你是对的。 所以问题是我从我的工作目录(在那里我总是编辑代码等)构建捆绑软件,并在我的修订版892修订版上匹配目标软件仓库时发生错误892 ......并且它们不同(是实际上894)。 生成正确包的方法是使用哈希标记信息而不是修订版号。 **不要这样** >汞柱捆绑--rev 1119 --base 892油库-892到1119.bundle **做** >汞柱捆绑--rev 1119 - 基地e5cc33458251仓库-892-to-1119.bundle –

+0

很酷,我认为这可能是。版本号被认为仅在本地结帐时有效。如果你在电子邮件中添加一个,你就会遇到麻烦。 –