【发布时间】:2012-12-05 04:25:10
【问题描述】:
我正在寻找一个命令,该命令将输出一个顺序补丁列表,如果存储库处于特定的已知早期状态,这些补丁将干净地应用。这是一个存储库的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
本质上,我想知道为了输出变更集 0、1、2、3、6、7 和 8 将什么 revset 传递给 hg export。我不想要变更集 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
【问题讨论】:
-
您需要单独应用补丁吗?或者你能导出一个补丁来显示第一个和最后一个变更集之间的累积差异吗?
-
我希望将它们单独列出。我已经知道如何获得任何两个回购状态之间的差异。
-
我已经玩过了,除了明确排除
branch2之外,找不到其他可行的方法。我能看到的问题是,如果你能找到解决方案(总是选择default分支),如果你有两个未命名的分支,它就行不通,这很有可能(可能比命名的分支更多,具体取决于在您的工作流程中?)。在这些情况下,您可能希望选择default分支,但也可以选择。
标签: version-control mercurial revision-history