关键字用Mercurial代替

时间:2011-01-20 21:10:53

标签: version-control mercurial

我对Mercurial有一个关于关键字扩展扩展的问题:是否可以使用关键字扩展实际的提交消息,以便它出现在源代码中以便快速参考源代码中的内容?

编辑:这似乎有效:

在repo的hgrc

Log={desc}

但它并没有堆叠,因为它据称是CVS对手。

使用Source,Luke:

跨越多条线和增量扩展的扩展, 喜欢CVS'$ Log $,不受支持。关键字模板映射“Log = {desc}“扩展到变更集描述的第一行。

1 个答案:

答案 0 :(得分:6)

关键字只能扩展到一行,因此您无法在log messages keep accumulating处获得类似CVS的行为。启用扩展程序后,hg help keyword会记录此信息。

可以使用Mercurial中的{desc} template keyword访问提交消息,因此您可以添加

[keywordmaps]
Log = {desc}

[keyword]
**.c =

让所有$Log$个文件中的.c扩展一行。

请注意,关键字扩展按照每个文件的方式提供类似CVS的世界视图。 Mercurial通常在存储库范围内工作。如果你这样做

$ hg commit -m "Fixed bug 123" foo.c    # create changeset 10:84e0d0dc9ce5
$ hg commit -m "Fixed bug 234" bar.c    # create changeset 11:2e85d7f2f93e

然后在修订版10中最后更改了foo.c是正确的,但是说修订版11只包含bar.c是错误的。 foo.c文件也是修订版11的一部分 - 对bar.c的更改取决于先前对foo.c的更改以及快照的更改完全合理版本11捕获foo.cbar.c的状态。

keyword extension在扩展关键字时基于每个文件工作:只要您更新,它就会将$Log: Fixed bug 123 $写入foo.c$Log: Fixed bug 234 $写入bar.c变更集2e85d7f2f93e。

如果您想了解上次触摸每个文件的原因和时间,那么这将是您想要的。如果您想知道存储库的全局状态 - 例如将其用作版本字符串! - 那是错的。问题是您的version.h文件在开发时会长时间保持不变,因此该文件中的关键字也将保持不变。

在这种情况下,您应该只是hg id作为Makefile的一部分运行。你可以通过以下方式使它变得更加花哨:

$ hg parents --template '{latesttag}+{latesttagdistance}-{node|short}\n'

将输出类似2.1+117-eed1e5bba9a8的字符串。这意味着您当前的版本(eed1e5bba9a8)在最后一个标记(2.1)之后提交了117次。这使得用户可以轻松地比较来自同一中央存储库的构建,如果需要,您仍然可以唯一地再现构建。