将subversion存储库编号转换为代码

Ali*_*arr 39 svn testing debugging revision versions

我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪错误.似乎使用的最佳版本号只是Subversion的当前版本号.有没有一种简单的方法可以将这个数字挂钩到(我的情况下是C++)头文件或其他什么东西,然后我可以在代码中找到它?我猜这是一个帖子提交钩子什么的?

有没有人有任何实现这个的经验(请分享代码,请?),或者可以提出更好的选择?谢谢.

jma*_*g2k 27

两种方式:

在代码中嵌入$ Id $$ Revision $.然后在文件上设置svn:keywords ="Id Revision"属性.这将为您提供该源文件的最后修改版本.适用于较小的项目和脚本.

或者,使用Makefile驱动的进程和命令行工具svnversion.(特定于语言 - 这适用于C/C++)

echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Run Code Online (Sandbox Code Playgroud)

或者使用sed和version.h.in构建一些更复杂的构建脚本.然后只需#include version.h

这将为您提供存储库版本号,该版本号将随每次提交/更新而更改,并且对于大多数项目而言可能是更合适的版本号.

注意:我还使用了手动更新的人类可读版本字符串.该示例将给出:版本:1.0.1-r13445

〜Ĵ


Rob*_*Rob 14

虽然漂亮,但是版本关键字技巧只会在该版本中更改文件时更新文件 - 如果您不更改文件,则它将继续反映旧版本.

如果您希望软件始终反映整体修订版号,那么您将不得不深入研究相关的SVN条目文件并将其解压缩,这并不太难(这是一个XML文件).

维基百科在其版本页面上执行此操作,以指示正在运行的软件的修订版; 代码在这里 - 查找getSvnRevision()方法.

  • svnversion似乎返回整个存储库的最后修改版本(不仅仅是WC的路径).请参阅我对如何解决这个问题的相关问题的答案:http://stackoverflow.com/questions/56227/how-do-you-determine-the-latest-svn-revision-number-rooted-in-a -directory#249905 (3认同)

Bil*_*ill 13

您也可以使用SubWCRev,它是TortoiseSVN的一部分.

SubWCRev是Windows控制台程序,可用于读取Subversion工作副本的状态,并可选择在模板文件中执行关键字替换.这通常用作构建过程的一部分,作为将工作副本信息合并到正在构建的对象中的一种方法.通常,它可能用于在"关于"框中包含修订号.

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html


iCo*_*der 6

在您的Makefile中,添加:

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
Run Code Online (Sandbox Code Playgroud)

然后你可以SVN_REV在你的代码中的任何地方使用宏,例如:

printf ("Version: SVN %s\n", SVN_REV);
Run Code Online (Sandbox Code Playgroud)


Vin*_*ert 5

您可以使用该svn:keywords属性来启用Rev关键字。

然后您可以$Rev$在您的代码中使用,SVN 将在更新时自动扩展它$Rev: 256 $,然后可以解析...

有关 Subversion 手册的更多信息

  • 如果您想要完整的项目版本号,这不是正确的做法,因为 $Rev$ 仅在更新该文件时才会更改,而不会在更新项目中的任何内容时发生变化。 (6认同)