1

我有一个项目,它在 Subversion 中的结构如下,

branch
tags
trunk
-- Library
---- Library Code
-- Website
---- Website Code

Library 文件夹包含大部分项目代码,是一个类库。Website 文件夹是一个使用该库的网站项目。该网站是部署到实时站点的内容。

我想在网站目录的根目录中自动创建一个文件,该文件存储主干目录的最新修订号。这可能吗?如果可以,我该怎么做?

颠覆服务器是 Windows 上的 VisualSVN,使用 TortoiseSVN 和 VisualSVN 作为客户端。

4

4 回答 4

3

由于您使用的是 TortoiseSVN,因此我建议使用SubWCRev而不是 svnversion 来完成此任务。

于 2010-01-22T13:23:04.587 回答
1

好吧,包含修订号的通常方法是

$Revision$

如果属性svn:keywords属性包含Revision.

但是,这只会为您提供上次提交该文件时的修订号,而不是当前的HEAD修订号。

在过去的一个项目中,我使用了一个调用命令行颠覆程序的小脚本来提取当前的修订号。您可以调用svn info并获取各种信息,包括工作副本的修订号。当您对该目录或其父目录之一执行更新时,该目录会更新,而文件实际更新时会更新,因此它可能不完全准确。但是当时对我来说已经足够了,因为无论如何我只更新了顶级文件夹:

>svn info trunk | findstr /r /c:"^Revision"
Revision: 14466
于 2010-01-14T09:50:37.263 回答
1

有一个名为svnversion的命令行工具可用于生成您需要的值。但是,您仍然需要手动执行它。还有一个额外的问题:

  1. 如果要将结果存储到存储库中,则必须在提交之前执行它,并且存储的值将始终过时。

  2. 如果您想保持结果不受版本控制,则必须在提交后执行。但是,它不会被导出。

所以这个问题没有简单的答案。提案:

  1. 有一个version.txt文件或任何带有$Revision$ 关键字的文件。
  2. 编写一个pre-commit 钩子脚本,如果version.txt没有被修改,则拒绝提交
  3. 或者,编写TortoiseSVN 客户端挂钩脚本以在提交前自动修改文件。
于 2010-01-14T10:28:26.013 回答
0

看看svn info命令。在您的项目中将其作为构建前/构建后的事件运行将为您提供所需的信息(以及一些附加信息)。然后,您需要将修订号写入文件。(如果您这样做,请确保您的 SVN 忽略此文件,否则它将进入文件更改的无限循环,您检查它,文件更改等...

于 2010-01-14T09:50:45.310 回答