2009-07-09 126 views
1

我在Windows的Box上使用Visual SVN。在svn中使用svnversion:关键字

我有知识库Application,其中Framework作为svn:external。一切都很好。我想将ApplicationFramework的版本包含在页脚文件中。这样我可以有这样的:

Application Version $ApplicationVersion$, Framework Version $FrameworkVersion$ 

通常情况下,我明白我可以使用svn:关键字和添加修改 - 但据我了解,SVN:关键字适用于每个文件为基础。有几个网站建议使用svnversion来产生每个变量的输出,但我不完全确定如何去做这件事。

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

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

谢谢!

回答

4

要使用svnversion,您需要将它集成到构建过程中。如果你在颠覆签出时运行它,它会输出一个字符串,如73597:73598,表明你的树有什么版本(注意不同的文件可能有不同的版本,加上文件也可能有本地修改)。你把像

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

到您的Makefile,然后把

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

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

编辑:对于PHP情况下,也不可能有自动写入对检出或更新文件的修订。相反,您可以在每次PHP访问时运行svnversion,将其输出放入HTML响应中。如果这太昂贵了,你可以将svnversion结果缓存在一个文件中,并且只在文件超过一个小时(比如说)时重新生成文件,留给用户记住在更新后删除文件以使其重新计算缓存立即。

+0

我的应用程序是一个PHP Web应用程序。因此,没有编译。如果我要使用subwcrev之类的东西,我怎么才能让它在检出时自动运行? – EvilChookie 2009-07-09 20:08:53