使用带有svn:keywords的svnversion

时间:2009-07-09 18:38:47

标签: svn visualsvn revision version-control-keywords

我在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应用程序。因此,没有编译。

谢谢!

1 个答案:

答案 0 :(得分:4)

要使用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结果缓存到一个文件中,只有在文件超过一小时(例如)时才重新生成文件,让用户记住在更新后删除文件以使其重新计算立即缓存。