为什么CVS中的分支标签不能向前发展?

时间:2009-06-15 21:00:11

标签: version-control cvs branch

我们公司最近开始创建CVS分支机构以标记每个版本。以前我们一直在使用标签,如果我们在测试期间修复了需要发布的东西,我们只需向前移动标签。这种方法很有效,直到对同一个文件进行了两次更改:一个应该被释放而另一个不应该被释放。现在我们需要对head和release分支应用相同的更改。

我正在使用Eclipse的CVS插件与CVS进行交互。当我查看文件的历史记录时,我在标签部分看到了i20090529Release标签(在本例中是文件的修订版1.30),当我在历史记录视图中“显示标签查看器”时,图标表明这是一个分支标签,而不是版本标签。当我查看自分支发生以来已经提交的修订版本时,我看到对头部的下一个修订版本变为版本1.31,对分支的下一个修订版本变为版本1.30.2.1。我的问题是,为什么i20090529Release标签保留在文件版本1.30,这不是i20090529分支的最新版本?这真的是一个真正的“标签”,还是更多的是一个概念性的想法,分支在这一点开始分支?我注意到我无法将此标记应用于该文件的任何其他修订版。为什么它会出现在Tags列中呢?

提前感谢您提供的任何澄清。

3 个答案:

答案 0 :(得分:2)

这就是分支在那时开始分支的想法。

分支是一组版本,它们在某个时刻从主干分支出来,并保持自己的独立开发(当然可以紧密协调)。它不是一组将自动应用于更高版本的更改。

它不是通常意义上的标签:如果您根据标签签出,您将在制作标签时获得源树的快照,而根据分支签出的结果将是随着时间的推移,随着分支的变化而变化。它类似于标签,并且以相同的方式工作; CVS使用旧的RCS文件格式,并将RCS标记用于分支和CVS标记。

CVS有几个很好的参考资料。阅读标签和分支。

答案 1 :(得分:1)

它可能不会移动,因为您没有使用它 - 根据您的描述,您仍然会对HEAD进行所有修订。

要使用分支,首先必须使用分支标记标记所有文件(此示例来自CVS手册):

cvs tag -b rel-1-0-patches

同时,我强烈建议您永远不要移动或更新快照标记,这样您就可以随时重建代码:

cvs tag rel-1-0

要使用分支,您必须将分支签出到您的工作目录中:

cvs co -r rel-1-0-patches example

然后,当您对分支提交更改时,您将看到应用于更改的分支标记。你不会看到HEAD的任何变化。要做到这一点,你需要将分支更改合并到HEAD中,这有点太复杂了,无法输入SO答案,所以转到文档:http://ximbiot.com/cvs/manual/cvs-1.11.23/cvs_5.html#SEC54

答案 2 :(得分:0)

普通标签设置为特定的文件修订版,永远不会移动。如果taged 1.30,它将说1.30直到手动更改。

分支标记被分类到分支修订版,如果使用修订版1.30分支文件,则第一个分支将是1.30.2(或下一个空闲偶数)。提交到该分支的第一个文件将获得1.30.2.1,下一个提交1.30.2.2等(请参阅Oliver Giesen的评论中的详细信息)

从此(1.30.2)分支检出此文件将始终获取该分支(1.30.2.x)中的最新文件修订版。

也可以在分支中进行分支..然后修订将最终像1.30.2.2.2(1.30.2.2文件修订版的第一个分支) cvs中的修订是< branchrevision>。< filerevison> [。< branchrevision>。< filerevison>] [。< branchrevision>。< filerevison>] ...等等。第一个branchrevision总是1(afaik)。

编辑:修正了Oliver Giesen指出的偶数错误