确保分支之间的合并发生在一个方向上

时间:2011-05-11 18:38:03

标签: version-control mercurial merge branch

今天早上我发现我的同事在mercurial中的两个分支之间合并了错误的方式 - 我们有一个ver5和ver6分支,在ver6中有额外的文件。是否有任何方法(可能是服务器端钩子)强制任何ver5节点的子节点来自ver5?

3 个答案:

答案 0 :(得分:3)

无论你是将ver5合并到ver6还是ver6合并到ver5中,你仍然会得到一个ver5的孩子,其中包含ver6中的东西。

但是,如果您想避免使用其分支名称为ver5且祖先为ver6的变更集,则可以使用钩子轻松完成。只是你把放到那个钩子是棘手的部分。如果你使它成为pretxnchangegroup钩子,你可以阻止人们将违规合并推送到服务器端仓库,但是他们已经提交了它,并且可能会在它之上进行一些更改,并且它们会有很难搞清楚如何解决这个问题。如果你可以控制他们的本地设置,你可以放入一个pretxncommit钩子,阻止他们提交合并,但你不能让他们只使用Mercurial工具运行那个钩子。

实际的钩子,无论你使用哪种类型,都可以使用以下任何一种策略:

  • 检查branchname是否为ver5,如果是,请确保ver6中的特定文件/内容不是presnet

  • 检查branchname是否为ver6,如果是,请确保p1和p2都不具有branchname ver5

TL; DR:这可能比它的价值更麻烦 - 坚持羞辱。

答案 1 :(得分:2)

而不是发布两次,我的答案是“ Mercurial:允许从发布分支合并到默认分支,但反之亦然”帮助? https://stackoverflow.com/a/19926324/1025457

答案 2 :(得分:2)

这应该这样做。它使用revset queryver5中找到ver6的任何合并。

hg log -r 'children(p2(::ver5 and ::ver6 and merge()) and branch(ver6)) and branch(ver5)'
  • ::ver5 and ::ver6 and merge()查找作为ver5ver6分支的祖先的所有合并
  • p2(...) and branch(ver6)抓取ver6分支上的第二个父级(传入变更集)。
  • children(...) and branch(ver5)然后抓取ver5分支上的实际合并变更集。

I recently needed to figure this out myself,但还需要确保default 间接未合并到我的发布分支中,即默认 - >功能 - >释放。