如何使用将出现在实际文件中的全局版本号标记SVN存储库中目录中的文件?

时间:2010-01-19 20:41:19

标签: svn versioning

我正在开发一个项目,它在同一个svn repo中存储多个版本但在不同的目录中。为了便于参与项目的编码人员,我希望能够添加一个评论标签,类似于

# $Revision: 144 $

但是,它应该包含一个简单的版本号,而不是文件版本:

# $Version: 1.63 $
# $Version: 1.64 $
# $Version: 2.0 $

有没有办法让subversion自动为特定目录和所有子目录以及添加到这些目录的任何新文件执行此操作?

3 个答案:

答案 0 :(得分:6)

  

在同一个svn仓库中存储多个版本,但存储在不同的目录中

听起来像SVN文档中描述的tagging一样可疑。你可以这样做吗?

SVN会自动跟踪所有文件来自哪个版本,因此您不必在文件中嵌入任何内容。

答案 1 :(得分:0)

您可以使用propedit添加任意属性,例如:

svn propedit my:version path/to/dir`

但是我不确定如何在cocommit期间填充评论。 (它甚至可能神奇地发生 - 我从未尝试过)。

答案 2 :(得分:0)

听起来好像你想根据上次修改的时间更改Perl模块的版本号,例如

our $VERSION = '1.2.12345';

...其中12345是上一次更改模块的svn修订号。

您可以在代码中使用$Revision$关键字来执行此操作,并结合一点Perl替换魔法来提取整数:

package My::Module;
my $revision_str = '$Revision$';    # will be transformed to '$Revision: xxxxx $'
(our $VERSION = $revision_str) =~ s/^\$Revision: (\d+) \$$/1.2.$1/;
 $ svn propset svn:keywords "Revision" My/Module.pm  
 property 'svn:keywords' set on 'My/Module.pm'  
 $ svn commit My/Module.pm -m'adding svn:keywords property'
 Committed revision 12345.

 $ perl -I. -MMy::Module -wle'print $My::Module::VERSION'  
 1.2.12345

(有关svn:keywords属性的更多信息,请参阅"Special Keywords"下的文档。)