粘性的标签(Sticky tags)

有时文件的一份工作拷贝的版本有另外的数据关联,例如它恰好位于一个分支上,请参阅[第 5 章],或者由于采用checkout -D或者update -D这样的命令,所以版本号受到日期的限制。因为这样的数据有固定位置的特点,也就是说这些数据是一个工作目录下一系列命令操作的结果,对于这种情况,我们称这些数据是粘性的(sticky)

在大多数情况下,数据的这种特性是cvs较费解的一面,用户无需考虑过多。然而,即使你用不着使用这一特性,也需要知道一些(例如,怎样避免它们)。

用户可以使用状态status命令来查看粘性标签是否存在和它被设置的日期:

$ cvs status driver.c
===================================================================
File: driver.c          Status: Up-to-date

    Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
    RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
    Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
    Sticky Date:        (none)
    Sticky Options:     (none)

用户可以使用cvs update -A命令来去掉粘性标签。-A选项将从文件版本更新到主干顶部,并且忽略中间的任何粘性标签、设置日期和选项。

就像[访问分支 在 第 5 章]中讨论的一样,粘性标签常常用于识别当前是在哪一个分支上工作,但是粘性型标签也用于没有分支的情况。例如,假设你想通过不更新你的工作目录内容的方法来避免受到同一项目组中其他成员可能带来的干扰。虽然你可以通过不使用更新命令cvs update来做到这一点,但是如果你只是希望不更新所有文件中的一小部分,粘性标签就有用了。如果你使用粘性标签检出某些文件的某个版本(例如1.4)。之后的cvs update命令不会取得这些文件的最新版本,避免更新你的工作目录中的内容,直到你使用cvs update -A选项重置标签。同样地,如果你在updatecheckout命令中使用-D选项来设置sticky date,这个日期也会被用于未来获得版本的操作中。

在很多情况下,用户希望取回一个文件的且不设置粘性标签的老版本。方法是在用checkout或者update的时候使用“-p”选项。使用“-p”选项可以把文件的内容作为标准输出。例如:
$ cvs update -p -r 1.1 file1 >file1
===================================================================
Checking out file1
RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
VERS: 1.1
***************
$

如果你想要取消一个提交(在这个例子中,将file1返回到版本1.1),这不是一个最简单的方法。应该是防止使用update命令的-j选项,参看[合并两个任意版本之间的不同 在 第 5 章]。