【发布时间】:2012-06-25 05:31:57
【问题描述】:
简介
如何在 Mercurial 中使用相同的标签标记多个变更集?可能在同一个分支,也可能在不同的分支。
例如类似于一个标签,表明完整的 QA 测试是否运行。
我可以通过编辑文件来创建标签的多个实例,但 hg 工具几乎总是忽略除第一个之外的所有实例。
详情
我正在寻找我称之为变更集“属性”的东西——我在其他 CVS 和 DVCS 中使用过的概念,但在 Mercurial 中似乎找不到。
基本上,一个属性很像一个标签,但是一个标签应该只引用一个单一的变更集,一个属性可能适用于多个变更集。
问:有人知道怎么做吗?
类似地:有没有办法在变更集创建后将描述附加到变更集。请注意,我不想重写历史记录:我不想删除或更改或替换原始签入消息。我只是想添加更多的东西——让更多的东西出现在像 hg log 这样的查询中。例如。 “我忘记添加一个文件来提交 df..a3 - 改为提交 8f..77 我签入了丢失的文件。
令人难以忍受的细节
我知道 - 你可以使用 hg tag -f 来强制一个标签应用于多个变更集。但是许多其他与 hg 标签相关的功能实际上只适用于每个标签的单个更改。或者每条下降线至少只有一个变更集 - 即每头。
因此,您可以永远定义一个标签。我喜欢将日期或其他上下文放在这样的标签中 - 例如测试通过-2012-01-14。
或者你可以有一个向上移动的“浮动标签” - 例如“所有慢速测试都通过的最新版本”,我可以简称为“测试通过”。
(顺便说一句,您可以在签入后应用此类属性或标签 - 特别是如果您的 QA 流程较慢,可能是快速冒烟测试,然后是较慢的全套测试,可能需要一周时间才能完成。因此,您签入,然后,稍后,返回并应用属性,即 uniqified 日期标签。您可能稍后需要返回并修改这样的标签,例如,如果添加了更多测试,以便过去通过的变更集所有测试不再适用。例如 all-tests-pass-2012-01-14 和 all-tests-pass-2012-01-15 可能适用于相同的变更集。)
但是必须将这样的固定标签统一起来是很麻烦的。因此,我称之为属性:适用于多个变更集的标签,它是受版本控制的。因此,您可以将 all-tests-pass 应用于 rev 105,然后再应用于 106 和 107。但随后您意识到新测试在 106 上失败,因此您回复。
那么属性历史可能看起来像
105:
tagged all-tests-pass on 2012-01-14-10h00 (in changeset XXX)
tagged all-tests-pass on 2012-01-15-10h00 (in changeset YYY)
106:
tagged all-tests-pass on 2012-01-14-13h00 (in changeset XXX)
tagged not-all-tests-pass on 2012-01-15-13h00 (in changeset YYY)
107:
tagged all-tests-pass on 2012-01-14-14h00 (in changeset XXX)
tagged all-tests-pass on 2012-01-15-10h00 (in changeset YYY)
还有一个修订集查询,如
105::107 and current_attribute_tag(all-tests-pass)
= 最晚返回 105 和 107,在 YYY 位于 repo 时或之后 = 但如果克隆则返回 105、106、107,以免包含 YYY
同时
105::107 and attribute_tag_at_any_time(all-tests-pass)
=如果 repo 持有 XXX,则随时返回 105 106 和 107
===
我希望能够做类似的事情
运行 hg bisect,但仅在标记为 tests-pass 的变更集上运行。
从 hg log 和 glog 中排除某些日志消息
等等
===
顺便说一句,我拒绝为此目的使用阶段和书签,因为它们不受版本控制。而且我希望这些属性标签是 VCed,这样我就可以按照上面提到的所有测试通过的潮起潮落。
分支几乎是我想要的,因为 Mercurial 分支实际上是变更集属性,而不是分支。但我不认为与变更集关联的分支可以在提交后更改。
(我真的希望你可以在提交变更集后将它们切换到一个分支。我称之为希望功能“追溯分支”。)
===
这里有一个我可能需要属性的经典示例:您是否曾经忘记将文件添加到 VCS?然后有一个无法构建的变更集?在后续更改中添加文件? ...
我希望能够将变更集追溯标记为 will-not-build--missing-files。然后让 bisect 甚至不用费心查看这些变更集。
【问题讨论】: