上一个: Tagging add/remove, 上层: Revisions


4.9 粘性标签

有时文件的一份工作副本的版本有另外的数据关联,例如它恰好位于一个分支上(参阅 Branching and merging),或者由于采用 `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' 选项将把本地的改变合并进树干顶部的文件,并且忽略中间的任何粘性标签、设置日期或选项。 参考 update 获得更多的 cvs update 操作信息。

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

在很多情况下,用户希望取回一个不设置粘性标签的文件的老版本。 方法是在用 checkout 或者 update 的时候使用 `-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' 选项,进一步讨论参看 Merging two revisions