如何在Tortoise SVN中更改代码库的版本号?

5

我有一个版本号为3960的项目。但不幸的是它没有受到源代码控制。现在我想将它放到SVN下并使用Tortoise SVN。但当我把它放进去后,版本号会从1、2、3、4等开始。

有没有一种方法可以将版本号更改为3960?


1
需要注意的一件事是,“构建号”具有最大值65535,而SVN存储库修订版本可以快速增长超过此值。如果您发现存储库增长速度比以前的构建号快,您可能需要考虑将修订号移入注释字段,并让构建号自然增加。 - skamradt
3个回答

10

我能想到的最安全的方法是创建一个带有适当数量空修订版本的转储文件,然后加载它。格式大致如下:

SVN-fs-dump-format-version: 2

Revision-number: 0
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2009-01-12T14:58:15.449041Z
PROPS-END

Revision-number: 1
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2009-01-12T14:58:40.758271Z
PROPS-END

Revision-number: 2
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2009-01-12T14:58:44.509698Z
PROPS-END

你可以省略svn:date,它依然是一个有效的svn仓库,但是使用{date}查询将不起作用(就像在日期与版本不单调递增的任何情况下一样)。因此最好伪造一段合理的日期字符串。

如果你想要3960个这样的修订版本,你可能需要编写一个脚本来生成转储文件。我把这留给读者作为练习 :-)


7

理论上是可能的,但并不是非常有用。

如果你需要跟踪这些信息,可以考虑创建一个标签“3960”,但否则保留正常的修订过程。

正如手册中所说:

全局修订号
与许多其他版本控制系统不同,Subversion的修订号适用于整个目录树,而不是单个文件。每个修订号选择整个目录树,在某个提交更改后的特定状态下。
另一种思考方式是,修订N表示在第N次提交后的存储库文件系统状态。当Subversion用户谈到“foo.c的修订5”时,他们实际上意味着“foo.c在修订5中的状态”。

修订号与“应用程序版本号”(您的应用程序的版本号)不同:后者由标签表示。


1
我不同意你的说法,认为这并不是没有用处的。如果你把修订号作为版本号的一部分(替换构建号),那么在尝试复现错误时,你可以始终将存储库设置为该特定版本。你可以使用标签来实现这一点,但这需要额外的步骤,并且如果你在同一个存储库中有多个可执行文件,它很快就会失效。 - skamradt
@skamradt通常情况下,将“修订号作为版本号的一部分(替换构建编号)”是一个好习惯,我同意。我只是指出了这种特定情况(如OP的问题所述)所涉及的麻烦,而不是将旧的修订号存储在某个地方并重新开始。 - VonC

3

首先,我不知道有什么方法可以做到这一点。如果可能的话,我认为你必须使用 svn-hookscript。

其次,源代码控制系统中的修订号与您程序的修订(版本)号没有任何关系。源代码控制系统跟踪您提交的每个更改,因此您可能会有比构建代码更多的提交。如果您不仅使用新的构建号码提交更改,它可能每次都会有所不同。我不认为您应该只在如此大的步骤中检查更改。

要跟踪您的构建号码,您应该使用标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接