0

我有一个在 SVN 中创建新标签并添加一些文件的脚本。我想自动化这个任务,所以我想找到一些方法来自动增加标签名称,从 1.0 到 X.0。

我想到了一个 conf 文件,它包含“1.0”作为第一个版本号,并且在每次调用脚本时都会被覆盖。但不确定我是否可以从文件中获取“1.0”值,然后在我的脚本中对其进行增量。

任何帮助将不胜感激。

提前致谢

4

3 回答 3

2

使用 autoprops 查看 Subversion 中的关键字。

首先,设置颠覆以尊重关键字扩展

enable-auto-props = yes

[auto-props]
version.txt = svn:keywords=Revision

然后,设置一个简单的文件,让我们version.txt用 $revision$ 关键字和一些随机内容来调用它。

$revision$
Random content

然后,在您的批处理文件中,使用新的随机内容重新创建 version.txt 文件

echo $revision$ >version.txt
echo %random% %date% %time% >>version.txt

并在每次运行批处理文件时签入这个新文件,因此它将变为

$revision 32 $
4214 Mon 21/01/2013 15:53:27,62 

这样,subversion 将保留批处理文件所有运行的准确版本号,即使在多个客户端和同时运行也是如此。

然后,您可以从 version.txt 中提取并使用修订号,代码类似于

for /f "tokens=1,2" %%a in (version.txt) do (
   if %%a==$revision (
     echo Revision number is %%b
     echo do something with %%b, create %%b tag or whatever
   )
)
于 2013-01-21T12:00:01.930 回答
2

不要创建种子配置文件。相反,如果文件不存在,则让批处理脚本默认为 1.0。

@echo off
setlocal
set "conf=version.conf"
if not exist "%conf%" (set version=1.0) else (
  for /f "usebackq delims=." %%N in ("%conf%") do set /a version=%%N+1
)
set "version=%version%.0"
(echo %version%)>"%conf%"

我假设你永远不会并行运行这个过程多次 - 如果你并行运行它可能会失败。可以进行修改以锁定 conf 文件,以便您可以在需要时并行运行。如果给定的文件或目录被锁定,它是否被进程使用,请参阅如何在命令行中签入的公认答案?了解更多信息。

于 2013-01-21T14:13:30.683 回答
1

由于您没有说要使用哪种语言,因此只能给出一般性说明:

当然可以维护一个包含 ' dottet version number ' 的小型 ' version ' 文件,例如可能。该文件内容可以被任何进程读取。您应该实现一些方法来将该内容拆分为其数字标记(主要和次要版本等)。这些数值可以由您喜欢使用的任何数学函数处理。例如,您可以增加它们。另一种方法是一些“内”函数,它采用数字标记并再次创建一个“点版本号”(现在可能0.2.60.2.7...) 最后您可以将该信息写回文件中。允许一个控制版本的哪一部分应该递增的参数当然是有意义的。

这种方案并不真正有效,但通常就足够了。

请注意,只有当您可以保证访问该版本文件始终只有一个进程时,这种方法才有效。否则,多个进程可能会覆盖彼此的结果,这肯定会导致问题。

作为替代方案,也许是更优雅的替代方案,您可以考虑将 subversion 存储库本身视为版本号的种子存储:而不是读取特殊文件内容(如果该文件被删除或发生其他事情怎么办?)颠覆里面的标签文件夹。它应该包含所有以前标记的版本。这正是您想要的信息。取所有版本号,对它们进行排序,取最高的一个并按上述方法处理。

于 2013-01-21T09:52:03.377 回答