2

目前,我的团队正在使用 Mercurial。

在以前的工作环境中,我们使用 CVS,然后使用 Subversion,不知何故,当我们签入我们的 java 类时,某个字段被更新了。

public class MyObject
{
    private static final String ID = "$Id: MyObject.java 10000 2008-11-14 16:20:10Z userid $";

    // rest of class
}

$Id:开头和结尾的$用作正则表达式分隔符。当我们进行提交时,ID 字符串已更新,因此 10000 将增加到 10001,日期更新为提交时间,用户 ID 更新为提交者。这在查看已部署的代码并需要确切知道部署了哪个版本的类时会派上用场,因为您可以strings对类文件执行命令并读取该字符串。

我们在 Maven 和更好的构建/依赖管理工具出现之前就开始这样做了,而且在大多数情况下,这不再需要了。

但是,我们遇到了这样一种情况,即项目被合并/更新,中央 Mercurial 存储库从某人的本地存储库中重建,并且正在完成构建以恢复 Maven 版本号......这有点混乱。我们不确定当前部署了哪些版本的类。

有什么方法可以设置 Mercurial 在提交或推送到中央存储库时执行此类更新?我什么都没找到,但有时那是因为搜索词有误。

4

2 回答 2

2

您可以使用至少两种更简单(并且更正确,顺便说一句)的方法

  • 源中的关键字(任何关键字,关键字中的任何数据),控制我的 Mercurial - 请参阅关键字扩展(而不是 SVN 样式的修订号,使用不可变的变更集哈希作为 ID)
  • 您可以在 SCM 的代码中什么都不做,但在构建|部署阶段添加所需的数据 - 阅读扩展 wiki 页面的“概述”部分。而不是hg id你,也许,更喜欢使用MercurialRev,就像 SubWCRev for Subversion - 存储库存储模板文件,它必须由词法分析器处理,并且只有最终文件在产品中使用
于 2013-06-06T21:13:44.847 回答
1

您可以为此使用Mercurial Hooks。更具体地说,预提交挂钩(您可以在hgrc 帮助中找到有关它的信息)。

例如,要在每次提交之前将当前日期写入文件,请在 hgrc 中设置(on~/.hgrcproject/.hg/hgrc):

[hooks]
pre-commit = date > file.txt

必须使用要在执行提交之前运行的命令来设置预提交设置。对于您的情况,您可以编写一个 shell 脚本来catsed您的 java 文件,以使用新的日期和修订号更新 id。

此解决方案的缺点是您必须在每个开发人员的机器上“部署”该 hgrc 才能每次都执行挂钩。

于 2013-06-06T18:49:36.237 回答