【问题标题】:Using svnversion with svn:keywords使用 svnversion 和 svn:keywords
【发布时间】:2014-10-14 22:04:43
【问题描述】:

我在我的 Windows Box 上使用 Visual SVN。

我有存储库Application,其中有Framework 作为svn:external。一切顺利。

当我结帐Application 时,我希望将ApplicationFramework 的版本包含在页脚文件中。这样我可以有类似的东西:

Application Version $ApplicationVersion$, Framework Version $FrameworkVersion$

通常,我知道我可以使用 svn:keywords 并添加修订版 - 但据我了解,svn:keywords 适用于每个文件。一些网站建议使用 svnversion 为每个变量生成输出,但我不完全确定如何去做。

再一次,在 Windows Box 上,使用 VisualSVN。如果 Versions.app 提供了一个更熟悉的界面供人们回答,我也会在 Mac 上开发 :)

编辑 - 我的应用程序是一个 PHP Web 应用程序。因此,没有编译。

谢谢!

【问题讨论】:

    标签: svn visualsvn revision version-control-keywords


    【解决方案1】:

    要使用 svnversion,您需要将其集成到构建过程中。如果你在 subversion checkout 上运行它,它会输出一个类似73597:73598 的字符串,指示你的树有什么版本(注意不同的文件可能有不同的版本,加上文件也可能有本地修改)。你把类似的东西

    CFLAGS+=-DSVNVERSION="\"`svnversion`\""  
    

    进入你的 Makefile,然后放入

    #define VERSION_STRING "Application version" SVNVERSION ", Framework version" FRAMEWORK_VERSION
    

    进入代码。如果你不使用 Make,或者不能让你的构建过程运行一个命令,它的输出会产生一个编译器命令行选项,那么你也可以使用 TortoiseSVN 附带的 subwcrev 实用程序。您将其用作预构建步骤,并让它将一些带有占位符的文件转换为文件的副本,并将占位符替换为实际版本;然后您的编译将编译并链接新文件。

    编辑:对于 PHP 案例,不可能在签出或更新时自动将修订写入文件。相反,您可以在每次 PHP 访问时运行 svnversion,将其输出放入 HTML 响应中。如果这变得太昂贵,您可以将 svnversion 结果缓存在一个文件中,并且仅在文件超过一小时(例如)时才重新生成文件,让用户记住在更新后删除文件以使其重新计算立即缓存。

    【讨论】:

    • 我的应用程序是一个 PHP Web 应用程序。因此,没有编译。如果我要使用 subwcrev 之类的东西,我怎样才能让它在签出时自动运行?
    • 我无法找到可接受的解决方案。要么解决方案不适合我的情况(我的 svn 服务器只是一个托管 VisualSVN 的 windows 框。就是这样)要么选项太复杂而无法实现,这应该只是一个简单的操作。
    • 您使用 VisualSVN 服务器的事实在这里真的无关紧要。 svnversion 只是一个客户端工具,根本不与服务器交互。当你在命令行手动调用它时,你能得到它(或subwcrev)输出版本信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多