我正在寻找一个命令,该命令将输出一个顺序补丁列表,如果存储库处于特定的已知早期状态,这些补丁将干净地应用。这是一个hg glog
包含我遇到的一些问题的存储库(如果您想使用自己的克隆,也可以从https://bitbucket.org/dusty/funny_repo/获得):
@ 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
本质上,我想知道要传递什么 revset 以hg export
输出变更集 0、1、2、3、6、7 和 8。我不想要变更集 4 和 5,因为应用了这些变更集的“效果”在变更集 6 的合并提交中。
ancestors(default)
输出所有变更集,但branch('default')
忽略变更集 1 和 2,虽然它们在不同的分支上,但补丁需要干净地应用。
显然,对于这种情况,我可以使用hg log -r "0..default and not branch(branch2)"
,但我正在寻找一个更通用的命令 revset,它适用于所有情况。
为了测试,我使用命令hg export -r "0..default and not branch(branch2)" -o ../%R.patch
和以下 for 循环来应用生成的补丁:
cd ../
mkdir patched
cd patched
for n in ../*.patch ; do
patch -p1 <$n
done