Svn 将subversion存储库编号转换为代码
我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪bug。 似乎最好使用的版本号应该是Subversion当前的版本号。有没有一种简单的方法可以将这个数字挂接到(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中找到它?我猜这是一个提交后钩子还是什么 有没有人有实现这一点的经验(请分享代码?),或者可以建议更好的替代方案?Svn 将subversion存储库编号转换为代码,svn,debugging,testing,revision,versions,Svn,Debugging,Testing,Revision,Versions,我想实现一种在代码中记录项目版本的方法,以便在测试时使用它并帮助跟踪bug。 似乎最好使用的版本号应该是Subversion当前的版本号。有没有一种简单的方法可以将这个数字挂接到(在我的例子中是C++)头文件或其他文件中,然后我可以在代码中找到它?我猜这是一个提交后钩子还是什么 有没有人有实现这一点的经验(请分享代码?),或者可以建议更好的替代方案? 谢谢。您可以使用svn:keywords属性启用Rev关键字 然后,您可以在代码中使用$Rev$,SVN将在更新到$Rev:256$时自动展开它,
谢谢。您可以使用
svn:keywords
属性启用Rev
关键字
然后,您可以在代码中使用$Rev$
,SVN将在更新到$Rev:256$
时自动展开它,然后可以解析
有两种方式:
在代码中嵌入$Id$或$Revision$。然后在文件上设置svn:keywords=“Id Revision”属性。这将为您提供该源文件的上次修改版本。适用于较小的项目和脚本
或者,使用Makefile驱动的进程和命令行工具sversion。(特定于语言-这应该适用于C/C++)
或者使用sed和version.h.in编写更复杂的构建脚本。那么就包括version.h
这将为您提供存储库版本号,该版本号将随着每次提交/更新而更改,对于大多数项目来说,这可能是一个更合适的版本号
注意:我还使用了手动更新的可读版本字符串。示例将给出:版本:1.0.1-r13445
~J虽然很漂亮,但修订关键字技巧仅在文件在该修订中更改时更新文件-如果您不更改文件,则它将继续反映旧修订 如果您希望软件始终反映总体修订号,那么您必须深入研究并提取它,这并不太困难(它是一个XML文件)
Wikipedia这样做是为了表明运行live的软件的版本;-查找getSvnRevision()方法。您也可以使用SubWCRev,它是龟甲vn的一部分 SubWCRev是Windows控制台程序,可用于读取Subversion工作副本的状态,并可选择在模板文件中执行关键字替换。这通常用作构建过程的一部分,作为将工作副本信息合并到正在构建的对象中的一种方法。通常,它可用于在“关于”框中包含修订号 在Makefile中,添加:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
然后,您可以在代码中的任何位置使用宏SVN_REV
,例如:
printf ("Version: SVN %s\n", SVN_REV);
一个好的最新解决方案: 创建一个包含以下行的
Makefile
(与YourFile.dox
在同一文件夹中):
和YourFile.dox
应包含以下内容:
...
PROJECT_NUMBER = "Revision RevNumber"
...
现在:
sed
用svversion
(在存储库的主文件夹中执行)的输出替换.dox中的RevNumber
,并将修改后的文件保存到YourFileDummy.dox
doxygen
在YourFileDummy.dox
上执行以生成文档您必须递归地检查所有条目文件,以找到最高版本号。我猜这就是svnversion所做的。svnversion似乎返回整个存储库的最后一次更改版本(不仅仅是WC的路径)。请参阅我对如何解决此问题的相关问题的回答:这似乎与Subversion 1.7不同,Subversion 1.7消除了除沙箱顶层之外的所有.svn目录。如果您想要完整的项目版本号,这不是正确的做法,因为$Rev$仅在该文件更新时才会更改,项目中的任何内容更新时都不会。
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
...
PROJECT_NUMBER = "Revision RevNumber"
...