使用mercurial生成合并日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mercurial生成合并日志相关的知识,希望对你有一定的参考价值。

我们使用Mercurial进行源代码管理,并希望为QA流程引入自动合并和更改日志。出于本讨论的目的,我们假设我们使用如下的简单3分支流:

 = forward merge
| = back merge of fix

Default --O--A--*--B--*---
               ^      
               |       
QA      -----M--X--C--*--N---
                ^       
                |       
Master  --------H--------*---  

所以问题是:是否有可能构造一个revset查询,在合并N时,最好在实际执行之前,但在实际执行之后,将导致默认分支上的所有提交的日志,这些提交尚未在QA分支中(On上面的图是A和B)。

或者公式化:是否可以构造一个revset查询,它将返回所有的变更集,如果我们将Default合并到QA中,它将被合并。

我只对默认分支上的提交感兴趣,而不是已经合并到Default(功能分支未包含在图形中)的功能分支中的单个提交。我对QA分支的提交也不感兴趣。

存储库维护得很好,但是有几年的历史,包含大约13000个节点。

我一直在尝试祖先和祖先,但要么我把X作为最新的共同祖先,要么是非常非常老的节点。我理解获得X的逻辑,但我真的在追求O.

我所拥有的最幸运的是这种变化:

hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and p2(!branch('QA'))"
hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and !children(branch('QA'))"

更新

使用Tom建议的“hg merge --preview --rev XYZ”生成如下输出:

changeset:   13070:7e59fc16aa4e
branch:      Default
parent:      13068:5b9409ad504f
parent:      13069:849bd43d2023
user:        *******
date:        Mon Dec 18 18:40:46 2017 +0200
summary:     Merged Feature branch A

changeset:   13071:07470ff919ff
branch:      Feature branch B
parent:      13061:540eda2c959b
parent:      13068:5b9409ad504f
user:        *****
date:        Mon Dec 18 18:49:42 2017 +0200
summary:     Merge with Default

changeset:   13072:a53260ffabca
branch:      Feature branch B
user:        *****
date:        Mon Dec 18 18:58:05 2017 +0200
summary:     Some text

changeset:   13073:37c895f2abf0
branch:      Default
parent:      13070:7e59fc16aa4e
parent:      13072:a53260ffabca
user:        *******
date:        Mon Dec 18 18:58:05 2017 +0200
summary:     Merged Feature branch B

不是太糟糕,但也不是超级好玩。至少它需要比简单的grep / sl更多的逻辑来解析。

先谢谢你,约翰

答案

我找到了一个主要做我想要的解决方案:

hg log --rev "branch('Default') & !ancestors(branch('QA')) & ancestors(heads(branch('Default')) & !closed()) & !children(branch('QA'))"

现在唯一缺少的是排除多个头合并,因为它们只是更改日志中的噪音。


更新:

所以我再次选择了这个项目,并在其他地方找到了一些很好的答案。

以下产生的输出类似于hg merge --preview,但可以模板化:

hg log -r "ancestors('$sourceBranch') - ancestors(.)" --template $template

这会筛选出不在源分支上的所有提交:

hg log -r "(ancestors('$sourceBranch') - ancestors(.)) and (branch('$sourceBranch'))" --template $template

以上是关于使用mercurial生成合并日志的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Mercurial (v1.0.2) 中的合并冲突?

如何解决Mercurial(v1.0.2)中的合并冲突?

Mercurial摆脱糟糕的合并

如何中止mercurial中的合并?

Mercurial 无法通过命令行合并

章鱼合并是否可能在mercurial中