获取Subversion版本库编号
我想实现一种在代码中logging项目版本的方法,以便在testing时使用它并帮助跟踪错误。 看起来最好的版本号只是来自Subversion的当前版本号。 有一个简单的方法来钩住这个数字(在我的情况下的C + +)头文件或什么,然后我可以在代码? 我想这是一个后提交钩或什么?
有没有人有任何实施这个经验(与代码分享,请?),或者可以build议一个更好的select? 谢谢。
虽然漂亮,修订关键字技巧只会更新该版本中更改的文件 – 如果您不更改该文件,那么它将继续反映旧版本。
如果您希望软件始终反映整个版本号,那么您必须深入研究相关SVN条目文件并将其解压缩,这并不难(这是一个XML文件)。
维基百科在他们的版本页面上做了这个,以指示正在运行的软件的修订; 代码在这里 – 查找getSvnRevision()方法。
两种方式:
在代码中embedded$ Id $或$ Revision $ 。 然后在文件上设置svn:keywords =“Id Revision”属性。 这会给你该源文件的最后修改版本。 适合较小的项目和脚本。
或者,使用Makefile驱动的进程和命令行工具svnversion。 (语言特定 – 这应该适用于C / C ++)
echo -n "#define VERSION 1.0.1-" > version.h svnversion -n . >> version.h
或者用sed和version.h.in构build一些更复杂的构build脚本。 然后只是#include version.h
这会给你存储库的版本号,这个版本号会随着每次提交/更新而改变,对于大多数项目来说可能是一个更合适的版本号。
注意:我还使用了手动更新的人类可读版本string。 这个例子会给出: Version:1.0.1-r13445
〜Ĵ
您也可以使用属于TortoiseSVN的SubWCRev。
SubWCRev是Windows控制台程序,可用于读取Subversion工作副本的状态,并可select在模板文件中执行关键字replace。 这通常用作构build过程的一部分,作为将工作副本信息合并到正在构build的对象中的一种手段。 通常,它可能被用于在“关于”框中包含修订号。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
在你的Makefile中,添加:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"' CFLAGS := $(SVNDEV) ...
那么你可以在你的代码的任何地方使用macrosSVN_REV
,例如:
printf ("Version: SVN %s\n", SVN_REV);
你可以使用svn:keywords
属性来启用Rev
关键字。
然后你可以在你的代码中使用$Rev$
,当更新到$Rev: 256 $
时,SVN会自动扩展它,然后parsing…
有关Subversion手册的更多信息
一个很好的最新解决scheme:
创build一个包含以下行的Makefile
(与YourFile.dox
在同一个文件夹中):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
YourFile.dox
应该包含这个:
... PROJECT_NUMBER = "Revision RevNumber" ...
现在:
-
sed
将RevNumber
中的RevNumberreplace为svnversion
的输出(在版本库的主文件夹中执行),并将修改后的文件保存到YourFileDummy.dox
- 在
YourFileDummy.dox
上执行doxygen
生成文档 - 您的文档现在将包含修订版本号!