提交或推送到窑时自动标记变更集

时间:2010-12-02 20:30:57

标签: mercurial tags fogbugz kiln

我想知道是否有一种方法可以自动标记变更集,因为它在本地提交或推送到窑存储库时。

我希望每个变更集都有一个带有版本/内部版本号的标记。我打算将我的版本/内部版本号存储在数据库中,并希望脚本从数据库中检索此值并向变更集添加标记。是否可以自动调用脚本来执行此操作作为提交后事件或推送到窑库时作为推后事件?

我也对在每次提交/推送时实现自动标记的任何其他方法持开放态度。

2 个答案:

答案 0 :(得分:8)

为什么不尝试以下其中一项,而不是为每个变更集创建一个标记:

  • 使用变更集哈希作为标识符吗?
  • 使用从日志生成的字符串作为您的标识符(见下文)?

可以使用以下命令从日志生成描述性字符串:

hg log -r 1.7.2 --template '{latesttag}-{latesttagdistance}-{node}\n'

结果采用以下形式:

<latest tag>-<# changesets since latest tag>-<changeset hash>

例如,在我的Mercurial仓库的本地克隆上,会生成:

1.7.2-2-5e51254ad4d4c80669f462e310b2677f2b3c54a7

这告诉我自标记1.7.2以来有两次提交,当前的变更集哈希是5e51254a。

在Mercurial中,每个标记都会创建一个新的变更集。因此,如果您标记每个提交,则会使repo中的更改集数量翻倍。您应该使用内置工具(如上所述)而不是尝试重新创建轮子。

答案 1 :(得分:1)

  

我想知道是否有一种方法可以自动标记变更集,因为它在本地提交或推送到窑存储库时。

你总是可以编写一个post commit hook来做到这一点。

  

我希望每个变更集都有一个带版本/内部版本号的标记。

标记可用于识别提交历史记录中的重要时刻。为这些时刻提供与产品开发相关的有意义的名称,如1.0版,1.3版等。

如果您要为每个更改集创建一个标记,那么您只会增加噪音级别。您仍需要在某些地方保留有关重要标签的信息。

将标记视为有关变更集的元信息。并非所有这些都值得同样重要。并非所有这些都需要元信息。

只有在您谨慎使用标签时,查看标签才能为您提供有意义的历史记录。

  

挂钩

见:

示例:通过push,pull或unbundle添加更改组后运行。我用它来触发自动构建。

[hooks]
changegroup.yyyy = command 

同样,还有post-commit,post-push hooks

[hooks]
post-<command> =  command