下一个: , 上一个: Assigning revisions, 上层: Revisions


4.4 Tags–符号修订号

版本号生存自己的一生。 它们与软件产品的发行版本号所做的全然没有任何关系。 根据你使用 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' 标志来查看一个文件的代表版本号的所有标签。 标签名称必须以大写或者小写字母开始,可以包括大小写字母、数字、`-' 和 `_'。 两个标签名 BASE 和 HEAD 是保留为 cvs 使用。 预料在将来可能采用特殊的方式命名 cvs 的保留字来避免冲突,例如,以 `.' 开始而不是采用象 BASEHEAD 一类的名称。

基于程序和发行版本号的数值版本号的信息,你可能在命名标签的时候选择一些命名惯例。 例如,有人可能采用程序的名称,在后面直接加上 `-' 而不是 `.',这样 cvs1.9 的标签可以被命名为 cvs1-9。 如果选择一致命名约定,于是不必经常猜测标签名称是 cvs-1-9 还是 cvs1_9 或者是别的什么。 甚至你也许还希望把你自己的命名约定实施到 taginfo 文件中去(参阅 taginfo)。

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

     $ 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 语法以及各种选项的用法,参看 Invoking CVS

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

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

(当把一个目录作为 cvs 的一个参数的时候,该命令不仅对该目录下的所有文件执行操作,而且也会递归地对该目录下的所有子目录中的文件执行操作。 参阅 Recursive behavior.)

checkout 命令中使用 `-r' 标志可以检出一个模块某个版本。 下面的命令可以很容易地取出模块 `tc' 1.0 发行版的所有源文件:

     $ cvs checkout -r rel-1-0 tc

比如,如果有人宣称在那个版本里有个 bug,但你在当前工作的副本中是找不到那个 bug ,这往往是很有用的。

用户也可以按时间检出一个模块。 参阅 checkout options. 当对那些命令指定 `-r' 或 `-D' 的选项,请留意粘性标签(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*    (--- <--- Look here
             1.3             1.6     1.3              \_
             1.4                     1.4
                                     1.5