标签形式的版本号

CVS以自己的方式管理着版本号,用户不用过多关心自己软件产品的版本号。根据你使用CVS的方式,在软件的不同版本之间,版本号可能被CVS修改多次。例如,由RCS5.6管理的源文件可能有如下版本号:
ci.c            5.21
co.c            5.9
ident.c         5.3
rcs.c           5.12
rcsbase.h       5.11
rcsdiff.c       5.10
rcsedit.c       5.11
rcsfcmp.c       5.9
rcsgen.c        5.10
rcslex.c        5.11
rcsmap.c        5.2
rcsutil.c       5.10

你可以使用tag命令来给一个文件的某个版本分配一个符号化的名称。在状态命令status中你可以使用-v选项来查看一个文件的代表版本号的所有标签。标签名称必须以大写或者小写字母开始,可以包括大写和小写字母,数字,连接符-和下划线_BASEHEAD是CVS标签的保留字。在将来可能采用特殊的方式命名CVS的保留字来避免冲突,例如,以.开始而不是采用象BASEHEAD一类的名称。

参考程序和数值型版本号的命名方法,你可能在命名标签的时候选择一些命名惯例。例如,有人可能采用程序的名称,在后面加上--而不是.,这样CVS1.9的标签可以被命名为cvs1-9。 应该选择选择一种兼容的命名方式,避免经常猜测标签名称是cvs-1-9还是cvs1_9 或者是别的什么。甚至你也许还希望把你自己的命名惯例添加到标签信息文件中去[用户自定义日志 在 第 8 章]。

下面的例子说明了怎样给一个文件添加标签。命令必须在模块的工作目录中执行。也就是说,你应该在backend.c文件所在的目录中运行“tag”命令。

$ cvs tag rel-0-4 backend.c
T backend.c
$ cvs status -v backend.c
===================================================================
File: backend.c         Status: Up-to-date

    Version:            1.4     Tue Dec  1 14:39:01 1992
    RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
    Sticky Tag:         (none)
    Sticky Date:        (none)
    Sticky Options:     (none)

    Existing Tags:
        rel-0-4                     (revision: 1.4)

了解完整的cvs tag语法以及一下选项的用法,参看[附录 B]

很少对单个文件添加标签。一种更常见的用法是在产品开发周期中的各个里程碑任务完成后对一个模块的所有文件添加标签,比如在发布一个版本的时候。

$ cvs tag rel-1-0 .
cvs tag: Tagging .
T Makefile
T backend.c
T driver.c
T frontend.c
T parser.c

(当把一个目录作为命令的参数的时候,该命令不仅对该目录下的所有文件执行操作,而且也会递归地对该目录下的所有子目录中的文件执行操作[第 6 章])

checkout命令中使用-r选项可以检出一个模块某个版本的所有文件。下面的命令可以很容易地检出模块tc1.0版的所有源文件。

$ cvs checkout -r rel-1-0 tc

这个选项往往是很有用的。比如,有人宣称在某个版本里有个bug,你在当前工作的拷贝中是找不到那个bug的,你可能需要检出以前的那个版本进行检查。

用户也可以按时间检出一个模块,请参阅[checkout options 在 附录 A]。如果使用-r选项,请留意粘性标签(sticky tags); 参看[粘性的标签(Sticky tags)]。

当你用同一个标签标记多个文件的时候,你可以想象标签以文件名为横轴,以版本号为纵轴绘制了一个曲线图(或者也可以想象成在一个由文件名和版本号组成的矩阵里面绘制的曲线)。以下面的5个文件为例:

        file1   file2   file3   file4   file5

        1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
        1.2*-   1.2     1.2    -1.2*-
        1.3  \- 1.3*-   1.3   / 1.3
        1.4          \  1.4  /  1.4
                      \-1.5*-   1.5
                        1.6

假设在过去的某个时候带“*”的版本号已被标记上来同样的标签。你可以把标签想象成一条经过所有被标记的文件的曲线的线头。当你抓住线头就可以纲举目张地得到所有被同一个标签标记的文件版本了。也可以通过另一种方式来看待这一点:把被同一个标签标记的所有版本号经过的曲线拉直,然后直直地看过去,就象下图所示的一样:

        file1   file2   file3   file4   file5

                        1.1
                        1.2
                1.1     1.3                       _
        1.1     1.2     1.4     1.1              /
        1.2*----1.3*----1.5*----1.2*----1.1     (--- <--- 从这里看过去
        1.3             1.6     1.3              \_
        1.4                     1.4
                                1.5