代码之家  ›  专栏  ›  技术社区  ›  Ali Parr

将Subversion存储库编号获取到代码中

  •  39
  • Ali Parr  · 技术社区  · 17 年前

    我想实现一种在代码中记录项目版本的方法,以便在测试时使用它,并帮助跟踪错误。 似乎使用的最佳版本号只是来自Subversion的当前版本号。有没有一种简单的方法将这个数字绑定到(C++中的头文件)头文件中,或者我可以在代码中找到它?我想这是一个提交后挂钩还是什么?

    是否有人有实施这一点的经验(请使用要共享的代码?)或者可以建议更好的选择? 谢谢。

    6 回复  |  直到 8 年前
        1
  •  14
  •   Rob    17 年前

    虽然很漂亮,但revision关键字技巧只在文件在该修订版中更改时更新文件-如果不更改文件,则它将继续反映旧修订版。

    如果您希望软件始终反映整体修订号,那么您必须深入研究 relevant SVN entries file 然后提取它,这并不太困难(它是一个XML文件)。

    维基百科是这么做的 their version page 指示正在运行的软件的修订; the code is here -寻找 获取svrevision() 方法。

        2
  •  27
  •   jmanning2k    17 年前

    两种方式:

    嵌入 $ID$ 美元修订版 在代码中。然后设置 svn:keywords=“id修订版” 文件的属性。这将提供该源文件的最后修改版本。适用于较小的项目和脚本。

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

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

    或者使用sed和version.h.in的更复杂的构建脚本。然后只是 #包括版本.h

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

    注意:我还使用了一个我手动更新的可读版本字符串。示例将给出: 版本:1.0.1-R13445

    ~J

        3
  •  13
  •   Bill    17 年前

    您也可以使用子频道,它是Tortoissesvn的一部分。

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

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

        4
  •  6
  •   iCoder    12 年前

    在生成文件中,添加:

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

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

    printf ("Version: SVN %s\n", SVN_REV);
    
        5
  •  4
  •   Vincent Robert    17 年前

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

    然后你可以使用 $Rev$ 在您的代码中,SVN将在更新到 $Rev: 256 $ 然后可以分析…

    More info on the Subversion manual

        6
  •  0
  •   Jesse    8 年前

    最新的解决方案:

    创建一个 Makefile 包含以下行(位于与 YourFile.dox ):

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

    你的照片 应包含以下内容:

    ...
    PROJECT_NUMBER         = "Revision RevNumber"
    ...
    

    现在:

    1. sed 替换 RevNumber 在.dox中,输出为 svnversion (在存储库的主文件夹中执行)并将修改后的文件保存到 YourFileDummy.dox
    2. doxygen 被执行 你的总结.dox 生成文档
    3. 您的文档现在将包含修订号!
    推荐文章