首页 / 知识

关于svn:将Subversion存储库编号输入代码

2023-04-12 12:35:00

关于svn:将Subversion存储库编号输入代码

Getting the subversion repository number into code

我想实现一种在代码中记录项目版本的方法,以便可以在测试时使用它并帮助跟踪错误。
似乎最好的版本号应该只是Subversion的当前修订号。 有没有简单的方法将此数字连接到(在我的情况下为C ++)头文件或类似的文件中,然后可以在代码中获取? 我猜这是一个发布后提交钩子吗?

有没有人有实现此问题的经验(请分享代码?),或者可以提出更好的选择?
谢谢。


两种方式:

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

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

1
2
echo -n"#define VERSION 1.0.1-"> version.h
svnversion -n . >> version.h

或带有sed和version.h.in的一些更复杂的构建脚本。然后只需#include version.h

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

注意:我还使用了人工更新的版本字符串。该示例将给出:版本:1.0.1-r13445

?J


令人敬畏的是,revision关键字技巧仅在该版本中的文件更改时更新文件-如果您不更改文件,则它将继续反映旧版本。

如果您希望软件始终反映总的修订版本号,则必须深入研究相关的SVN条目文件并将其解压缩,这并不难(这是一个XML文件)。

Wikipedia在其版本页面上进行此操作,以指示正在运行的软件的修订版;代码在这里-寻找getSvnRevision()方法。


您还可以使用SubWCRev,它是TortoiseSVN的一部分。

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

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


在您的Makefile中,添加:

1
2
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...

那么您可以在代码中的任何位置使用宏SVN_REV,例如:

1
2
printf ("Version: SVN %s\
", SVN_REV);


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

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

有关Subversion手册的更多信息


一个很好的最新解决方案:

创建包含以下行的Makefile(与YourFile.dox在同一文件夹中):

1
sed"s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

并且YourFile.dox应该包含以下内容:

1
2
3
...
PROJECT_NUMBER         ="Revision RevNumber"
...

现在:

  • sedsvnversion的输出(在存储库的主文件夹中执行)替换.dox中的RevNumber,并将修改后的文件保存到YourFileDummy.dox
  • YourFileDummy.dox上执行doxygen以生成文档
  • 您的文档现在将包含修订号!

  • 输入编号方法项目

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢