如何创建反映SCM修订/提交的运行时版本输出?

时间:2015-05-08 15:17:33

标签: git svn versioning

某些程序会以x.y.z-[git commit/svn id]的形式打印一个版本(例如,1.3-9-gddc8d41返回git describe --tags)以用于开发版本。我想知道如何解决以下问题:

为了将版本放入要在运行时打印的程序中(例如,当使用--version调用程序时),需要在编译时知道它。通常一个在测试后提交(这意味着编译)。

  • 在运行时打印的版本是指先前的提交或
  • 对于每个提交,必须使用相同的文件集来更新版本(然后在运行时打印的版本与SCM中的修订版ID /提交哈希值之间仍然不匹配)< / LI>

可以在提交之前确定修订版ID或甚至提交哈希,并将其写入版本文件。那是怎么做的?如果是,具体如何。

2 个答案:

答案 0 :(得分:0)

如果要包含实际的SCM修订/提交标识符,则列出的第二种方式是通常的方式。重复文件集称为标记(在GitSVN中),并且具有几个重要的约定属性:

  • 标签在功能上与复制源相同,但允许一些更改以支持版本控制;
  • 除了原始创建(通常通过挂钩或权限强制执行)之外,它将不再提交。

这样,标签中的代码完全匹配从中复制的最后修订版本 - 版本信息除外 - 并且版本号的明显“不匹配”无关紧要。

SVN团队正是这样做的,here you can see an example标记了1.8.11并在同一次提交中设置了版本信息。

答案 1 :(得分:0)

抽象@ PartickQuirk的答案:人们通常可以在运行时通过两者实现反映SCM提交的版本的输出

  • 排除静态版本信息的来源(通常在文件中的文字中硬编码),例如,通过从模板生成它,
  • 没有管理在SCM中生成版本输出的编译结果(“binary”)(当然是源代码)

没有必要复制任何文件(但SCM可能会在内部进行复制)。