我们计划从CVS转移到SVN。
除了我们的开发人员在每次提交时都会进行一个预/后标记之外,一切看起来都很好。
因此,在CVS中,我们没有问题,因为标记是直观且廉价的。
然而,在SVN中,标记是一个复制,对吗?
有了这个说法,我想知道是否有一种方法可以基于修订版本或我在提交之前可以访问的其他内容来执行之前和之后的标记。
关于CVS和SVN标签之间的一些细微差别,可能会在迁移过程中引起一些问题(至少在我的小组中引起了误解)。
在CVS中,标签是您开发的一种时间快照;通常您在HEAD中进行开发,当您达到某种稳定状态并希望将其保存供以后参考时,只需打一个标签。如果您从CVS存储库检出标签版本,则无法修改它,或者更准确地说,可以在本地副本上修改它,但无法提交更改。以某种方式,CVS自动保护其标签免受意外更改
在SVN中,副本只是主干的另一个路径上的副本。如果您从存储库的标记路径检出代码,则仍然可以更改它并将其提交回去。这通常是您不想做的事情,至少如果您认为标签是不应更改的固定开发快照。这就是为什么可以使用特定的钩子脚本强制使标记目录只读(我认为应该真正鼓励这样做)。
希望这对讨论SVN和CVS之间的差异有所帮助(请原谅我的英语)。
我不确定我是否正确理解了问题,但是您可以在svn中标记特定的修订版本:
$ svn cp -r <url>/trunk <url>/tags/my_tag
有关更多信息,请参见使用Subversion进行版本控制中的svn复制章节。附录B. Subversion for CVS用户也值得一读。
标签是虚拟副本。可以将其视为UNIX中的符号链接——这是一种非常低成本的操作。