Version control 我怎样才能得到以线性顺序干净地应用的mercurial补丁列表?

Version control 我怎样才能得到以线性顺序干净地应用的mercurial补丁列表?,version-control,mercurial,revision-history,Version Control,Mercurial,Revision History,我正在寻找一个命令,该命令将输出一系列连续补丁,如果存储库处于已知的特定早期状态,这些补丁将干净地应用。这是一个存储库的hg glog,其中包含我遇到的一些问题,如果您想使用自己的克隆,也可以从中获得: @ changeset: 8:ffd749c92f3b | tag: tip | summary: h | o changeset: 7:bc959885f6aa |\ parent: 6:dfe021fa52a4 | | parent

我正在寻找一个命令,该命令将输出一系列连续补丁,如果存储库处于已知的特定早期状态,这些补丁将干净地应用。这是一个存储库的hg glog,其中包含我遇到的一些问题,如果您想使用自己的克隆,也可以从中获得:

@  changeset:   8:ffd749c92f3b
|  tag:         tip
|  summary:     h
|
o    changeset:   7:bc959885f6aa
|\   parent:      6:dfe021fa52a4
| |  parent:      5:4d8bc738f0ab
| |  summary:     MERGE
| |
| o  changeset:   6:dfe021fa52a4
| |  parent:      3:1374ea53e7b7
| |  summary:     e
| |
o |  changeset:   5:4d8bc738f0ab
| |  branch:      branch2
| |  summary:     g
| |
o |  changeset:   4:e46fa4632d36
|/   branch:      branch2
|    summary:     f
|
o  changeset:   3:1374ea53e7b7
|  summary:     d
|
o  changeset:   2:59712a781f0c
|  branch:      branch1
|  summary:     c
|
o  changeset:   1:ff7f8724ad17
|  branch:      branch1
|  summary:     b
|
o  changeset:   0:a3b3a87aa422
   summary:     a
本质上,我想知道传递给hg导出的revset是什么,以便输出变更集0、1、2、3、6、7和8。我不想要变更集4和5,因为这些变更集的“效果”应用于变更集6中的合并提交

ancestorsdefault输出所有变更集,但分支“默认”忽略变更集1和2,而变更集1和2位于不同的分支上,是补丁干净应用所必需的

显然,对于这个实例,我可以使用hglog-r0..default,而不是branchbranch2,但我正在寻找一个更通用的命令revset,它可以在所有情况下工作

为了进行测试,我使用命令hg export-r 0..default而不是branchbranch2-o../%r.patch和以下For循环应用生成的修补程序:

cd ../
mkdir patched
cd patched
for n in ../*.patch ; do
    patch -p1 <$n
done
更一般的尝试:

仍然需要一次初步的人员检查和配置行动; 将仅适用于相对较新的Mercurial,其中p1 | 2功能添加到Revset 预检查:对于带有mergeset的存储库,您必须定义要使用的mergeset的父行,p1MERGESET和p2MERGESET将显示谁是谁;记住mergeset上的Revision。为您提供一个测试用例

hg log -r "p1(7)"
changeset:   6:dfe021fa52a4
parent:      3:1374ea53e7b7
user:        Dusty Phillips <dusty@buchuki.com>
date:        Mon Dec 17 17:54:01 2012 -0700
summary:     e

hg log -r "p2(7)"
changeset:   5:4d8bc738f0ab
branch:      branch2
user:        Dusty Phillips <dusty@buchuki.com>
date:        Mon Dec 17 17:53:55 2012 -0700
summary:     g
最终编辑 我记得形式逻辑的课程:我在expression x-中有双重否定!在x中设置但不在not SET是刚设置的。净化的旋转套件是简单和干净的

"ancestors(p1(7)) | descendants(p1(7))"

最初它也跟在| p17后面,但现在/Mercurial Distributed SCM version 2.4.2/,因为我不知道的原因,变更集是他自己的祖先和后代:hg log-r ANCESTORP17&DESENDANTSP17返回变更集6

您需要单独应用补丁吗?或者您可以导出一个显示第一个和最后一个变更集之间累积差异的补丁程序吗?我希望它们单独列出。我已经知道如何获得任何两种回购状态之间的差异。我已经玩过一个游戏,除了明确排除branch2之外,找不到其他可行的方法。我看到的问题是,如果你能找到一个解决方案,总是选择默认的分支,那么如果你有两个未命名的分支,它就不起作用,这很可能比根据你的工作流命名的分支更有效?。在这些情况下,您可能希望选择默认分支,但也可能是。
"ancestors(p1(7)) | descendants(p1(7))"