【问题标题】:Embedded SVN Revision # in an Exported C-File导出的 C 文件中的嵌入式 SVN 版本号
【发布时间】:2012-01-27 02:04:35
【问题描述】:

我有一个基于多个不同 Linux/Unix/AIX 主机的 C/C++ 项目,因此能够引用 Build # 非常有帮助。我已经有了代码来执行经典的 $Rev$ SVN 关键字事情并在需要时将其打印出来,但是该数字仅在我修改包含它的 1 个文件时才会更新(这恰好是最不常编辑的文件之一在整个存储库中)。

我通常“svn 导出”我的存储库并在将其移动到另一台主机之前创建一个 tarball,因此 svnversion 将不起作用(仅在少数安装了 SVN 的机器上返回“导出”)。我想知道是否有更好的方法来获取这个数字,而不是构建一个“svn export”脚本,该脚本将以某种方式运行 svnversion 并将其嵌入到我的源代码中。

我将 CMake 用于我的构建系统。

【问题讨论】:

    标签: svn


    【解决方案1】:
    1. 确切获得“这个”号码?
    2. 哪个“这个”版本号? WC 树中的最后一次提交,WC-repo 的头部修订
    3. 你有什么操作系统?

    我通常'svn export'我的存储库并在将其移动到另一台主机之前创建一个tarball,所以svnversion

    显然必须在导出前在WC内部调用

    如果您在 tarball 中有代码,如果需要全局 resision-id 来获取信息,也许您希望在 文件名 中而不是存档内的文件中进行修订?

    作为基于 Windows 的 TSVN 用户,我在构建脚本中使用 SubWCRev 来获取和存储一些存储库信息

    • 提交后客户端钩子执行SubWCRev.exe <path> Builder.tpl Builder.bat ... call Builder.bat,其中Builder-template包含svn export ... z:\trunk$WCDATE=%Y%m%d$-r$WCREV$,模板中的每个宏都扩展为subwcrev处理文件中的真实数据
    • 我的包含模板也具有 WCDATE 构造,也使用 subwcrev 进行了预处理

    对于 Linux,SubWCRev 的端口具有相同的功能:SVNWCRev(未测试)和不错的SvnRev(与 SVNWCRev 相比积极开发),其中一些扩展到 SubWCRev|SVNWCRev

    【讨论】:

    • 我在 LInux (RHEL5) 机器上进行开发,但部署是(由我)在 SUSE、RHEL5、RHEL6、Debian、AIX、Solaris 等机器的集合上完成的。我想要代码中的存储库版本,以便我可以将它嵌入到调试日志中,以便用户在报告错误时可以看到它。
    • svnversion 在 WC 中,如果存储库在本地文件系统上,则一些 svnlook 子命令,svn info + WC 中的 grep 或导出的目录
    猜你喜欢
    • 2012-02-12
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多