附图
如何使用相同的标记在Mercurial中标记多个变更集?可能在同一个分支上,可能在不同的分支上。
E.g。像标签一样说明完整的QA测试是否运行。
我可以通过编辑文件来创建标签的多个实例,但是hg工具几乎总是忽略除第一个之外的所有实例。
DETAIL
我正在寻找我所谓的变更集“属性” - 我在其他CVS和DVCS中使用过的概念,但我在Mercurial中似乎找不到。
基本上,属性非常类似于标记,但是标记只应引用单个变更集,属性可能适用于多个变更集。
问:有人知道怎么做吗?同样:在创建变更集之后,有没有办法将描述附加到ChangeSet。请注意,我不想重写历史记录:我不想删除或更改或替换原始签入消息。我只想添加更多东西 - 并且在hg log这样的查询中会出现更多内容。例如。 “我忘了添加一个文件来提交df..a3 - 而是提交8f..77,我检查了丢失的文件。
EXCRUCIATING DETAIL
我知道 - 您可以执行hg tag -f强制标记应用于多个变更集。但是,许多其他hg标签相关的功能实际上只适用于每个标签的单个changerty。或者每个下降线至少只有一个变化集 - 即每个人。
因此,您可以永久地定义标签。我喜欢将日期或其他上下文放在这样的标签中 - 例如试验通-2012-01-14
或者你可以有一个向上移动的“浮动标签” - 例如“所有慢速测试通过的最新版本”,我可以称之为“测试通过”。
(顺便说一句,您可以在签入后应用此类属性或标签 - 特别是如果您的QA流程较慢,可能是快速冒烟测试,然后是较慢的全套测试,可能需要一周的时间才能完成。因此,您签入,然后,稍后返回并应用属性,即未加密的日期标记。您可能稍后需要返回并修改此类标记,例如,如果添加了更多测试,那么以前通过的变更集所有测试都不再适用。例如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)
和像
一样的revset查询 105::107 and current_attribute_tag(all-tests-pass)
=在最新,YYY或之后的回购中返回105和107 =但是如果克隆则返回105,106,107,以便不包括YYY
,而
105::107 and attribute_tag_at_any_time(all-tests-pass)
=如果回购持有XXX
,则随时返回105 106和107===
我希望能够做到像
这样的事情运行hg bisect,但仅限更改集标记为tests-pass。
从hg log和glog中排除某些日志消息
等
===
顺便说一句,我为此目的拒绝了阶段和书签,因为它们不受版本控制。我希望这些属性标签能够被VCed,这样我就可以按照类似于ebb和all-tests-pass的流程,如上所述。
分支几乎就是我想要的,因为Mercurial分支实际上是变更集属性,而不是分支。但我不认为在提交后可以更改与变更集关联的分支。
(我真的希望您在提交后可以将变更集切换到分支。我称之为“追溯分支”功能。)
===
以下是我可能需要属性的典型示例:您是否曾忘记将文件添加到VCS?然后有一个无法构建的变更集?在随后的更改中添加文件? ...
我希望能够追溯标记变更集,而不是构建 - 遗失文件。然后将二等分甚至不用看这些变更集。
答案 0 :(得分:3)
看看这个:Custom revision properties in Mercurial?
没有对属性的原生支持。您可以编写一个扩展名(其中包含extra
属性的字典,可以使用变更集进行保存。
或者你可以将它与每个标签的多个变更集一起破解(如你所建议的那样)。
或者您可以与新的all-tests-pass分支一起破解它,并在所有测试通过时让CI服务器合并到该分支(然后bisects是默认提示和all-tests-pass的提示)。
但简短的回答仍然是没有现成的本地方式。