如何使用将显示在实际文件中的全局版本号标记SVN存储库中目录中的文件?
我正在从事一个项目,该项目将多个版本存储在同一个svn repo中,但存储在不同的目录中。为了便于项目编码人员参考,我希望能够添加一个类似于如何使用将显示在实际文件中的全局版本号标记SVN存储库中目录中的文件?,svn,versioning,Svn,Versioning,我正在从事一个项目,该项目将多个版本存储在同一个svn repo中,但存储在不同的目录中。为了便于项目编码人员参考,我希望能够添加一个类似于 # $Revision: 144 $ 但是,它应该包含一个简单的版本号,而不是文件版本号,如下所示: # $Version: 1.63 $ # $Version: 1.64 $ # $Version: 2.0 $ 有没有办法让subversion为特定目录和所有子目录以及添加到这些目录中的任何新文件自动执行此操作?您可以使用PropertEdit添加任
# $Revision: 144 $
但是,它应该包含一个简单的版本号,而不是文件版本号,如下所示:
# $Version: 1.63 $
# $Version: 1.64 $
# $Version: 2.0 $
有没有办法让subversion为特定目录和所有子目录以及添加到这些目录中的任何新文件自动执行此操作?您可以使用PropertEdit添加任意属性,例如:
svn propedit my:version path/to/dir`
但是,我不知道如何在co
或commit
期间将其填充到注释中。(这甚至可能神奇地发生——我从未尝试过)
将多个版本存储在同一个svn repo中,但存储在不同的目录中
听起来很像SVN文档中描述的那样。你能这样做吗
SVN将自动跟踪所有文件来自哪个版本,因此您不必在文件中嵌入任何内容。听起来好像您想根据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:关键字“修订版”My/Module.pm
在“My/Module.pm”上设置属性“svn:keywords”
$svn commit My/Module.pm-m'adding svn:keywords属性'
承诺修订12345。
$perl-I.-MMy::Module-wle'print$My::Module::VERSION'
1.2.12345
(有关svn:keywords属性的更多信息,请参阅下面的文档。)我们已经考虑过道具,但是只有afaik关键字才会自动插入到文本中。注释部分只是为了避免人们试图给我提供perl代码解决方案propedit与预提交钩子的结合会起作用吗?如果是,我将如何处理?此外,道具是否会自动递归传播到directoy内容中?如果不填充,可以指定一组固定的svn:关键字。它不适用于随机变量properties@sander:那么你的意思是你可以添加自定义关键字,然后它会被填充还是没有@米塔尔杜:我想这可能行得通,但我没有弄乱钩子,所以我不能真正地去做。虽然我认为如果你在版本的顶级目录上设置道具,那么钩子可以读取道具,然后在所有文件/目录上重新设置道具,并在实际文件体的nessecary点添加字符串。。。这听起来有点难看:-)我的意思是自定义属性不会被填充,只有svn:关键字(如id、作者、修订版等)的有效设置才会被填充答案在很大程度上取决于您希望建议的
版本
关键字具有什么语义。是否希望它指示上次修改文件时的版本?是否包含任意属性的值?还有什么吗?这听起来像是某种避免学习源代码管理的奇怪方式。为什么有多个版本?也许有更好的解决办法。
$ 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