mercurial存储库中的变更集可以按时间顺序合并吗?

时间:2010-11-12 08:15:28

标签: mercurial

我想重新使用项目B中项目A的代码(两者都在不同的存储库中),所以我想将几个文件从原始项目存储库A移动到一个公共存储库C,它将由项目B.(由Maven管理的依赖项等)

我可以使用convert扩展和一些其他脚本(以发现所述文件的完整历史记录)将我想要从A移动的文件提取到他们自己的'过滤'存储库F中。

在这个阶段,我可以: a)将F拉入C,合并并提交,或 b)将所有F变更导出为补丁,然后将其导入C 但是,这两种方法都会导致存储库C,其更改集不按时间顺序排序。我认为F的历史可以追溯到C.的历史。

是否有可能'合并'两个存储库,以便按时间顺序排列变更集?

我有脚本可以执行此操作 - 但到目前为止,每次从A移动不同的集合F时我都必须完全重建C.(通过将所有C和F导出为补丁,创建新的C,然后导入所有补丁按时间顺序排列。)

谢谢!

1 个答案:

答案 0 :(得分:0)

不是真的。变更集的父级内置于其nodeid(加密哈希)中,因此您无法在不完全更改/重建变更集的情况下重新排序变更集的实际父级。

如果变更集的父变更集在它之前,您可以按照您想要的任何顺序将变更集引入存储库。

因此,如果A和B具有以下变更集以及以下修订号(r =)和创建时间(t =):

A: null----[A r=0,t=0]----[C r=1,t=2]----[E r=2,t=4]
B: null----[B r=0,t=1]----[D r=1,t=3]----[F r=2,t=5]

你可以小心翼翼地创建一个这样的存储库:

C: null----[A r=0,t=0]-------------------[C r=2,t=2]-------------------------[E r=4,t=4]
     \
      \-----------------[B r=1,t=1]--------------------[D r=3,t=3]------------------[F r=5,t=5]

然而,这样做的价值很小,因为变更集的序列号(上面的r)毫无意义。)

理想情况下,您的存储库B将是A的克隆,其所有本地修改仅存在于B.这样,如果您修复A中的错误,您可以拉入B然后合并以获得该修复。移植/转换是一种空心替代品。另一个选择是将A和B的公共部分提取到repo C中,然后A和B都将用作Mercurial子存储库。