今天早上我发现我的同事在mercurial中的两个分支之间合并了错误的方式 - 我们有一个ver5和ver6分支,在ver6中有额外的文件。是否有任何方法(可能是服务器端钩子)强制任何ver5节点的子节点来自ver5?
答案 0 :(得分:3)
无论你是将ver5合并到ver6还是ver6合并到ver5中,你仍然会得到一个ver5的孩子,其中包含ver6中的东西。
但是,如果您想避免使用其分支名称为ver5且祖先为ver6的变更集,则可以使用钩子轻松完成。只是你把放到那个钩子是棘手的部分。如果你使它成为pretxnchangegroup
钩子,你可以阻止人们将违规合并推送到服务器端仓库,但是他们已经提交了它,并且可能会在它之上进行一些更改,并且它们会有很难搞清楚如何解决这个问题。如果你可以控制他们的本地设置,你可以放入一个pretxncommit
钩子,阻止他们提交合并,但你不能让他们只使用Mercurial工具运行那个钩子。
实际的钩子,无论你使用哪种类型,都可以使用以下任何一种策略:
或
TL; DR:这可能比它的价值更麻烦 - 坚持羞辱。
答案 1 :(得分:2)
而不是发布两次,我的答案是“ Mercurial:允许从发布分支合并到默认分支,但反之亦然”帮助? https://stackoverflow.com/a/19926324/1025457
答案 2 :(得分:2)
这应该这样做。它使用revset query从ver5
中找到ver6
的任何合并。
hg log -r 'children(p2(::ver5 and ::ver6 and merge()) and branch(ver6)) and branch(ver5)'
::ver5 and ::ver6 and merge()
查找作为ver5
和ver6
分支的祖先的所有合并p2(...) and branch(ver6)
抓取ver6
分支上的第二个父级(传入变更集)。children(...) and branch(ver5)
然后抓取ver5
分支上的实际合并变更集。 I recently needed to figure this out myself,但还需要确保default
间接未合并到我的发布分支中,即默认 - >功能 - >释放。