【IT168 专稿】当我们将该 tag 曲线上的 * 标记拉直后,你就得到了由所有 tag 修订号组成的如下图的水平线:
由于tag的目的是记录开发历史,因此人们通常不会删除或者改变标签。对tag的删除,移动,重命名多半是因为临时使用标签或者不小心放错位置。警告,下列命令会永久删除历史信息,使用时应尽量小心。
cvs rtag -d rel-0-4 tc
Dates/Tags
与Versions一样,Dates也是标签Tag的集合。区别在于前者以版本作为tag的标记,而后者则以时间为标记。相比与Date类型,Version Tag更加常用。
为了更好的全面理解这些核心CVS概念,我们通过Show History视图将这些概念串联起来,如下图所示。
有对了相关概念的理解,接下来,我们将介绍CVS的常用操作。相信大家对日常的操作如update,commit非常熟悉,只做简单介绍。更多地是关注那些容易忽视但是特别使用的命令。
作为三部曲之一的Copy操作,CVS对应的命令为check out。具体操作是,选择HEAD目录下的目标源文件夹,右键单击Check Out,如图:
Check Out
Check out之后的本地工作目录与CVS目录一致。如果想自定义文件夹的根目录,则可选择Check Out As命令。
Switch to another Branch or Version
作为三部曲之二的Modify操作,除正常的源代码变更操作外,对应一个非常重要的Eclipse CVS命令,即Switch to another Branch or Version,即切换到其它分支或者标签做源代码的修改,如图:
Merge
作为三部曲之三的Merge操作,除正常的update/commit外,也对应的一个非常重要的CVS命令merge,即将branch或tag与HEAD中的Base version进行合并,如图。
Branch
此外,如果想创建一个新的分支,可通过右键Team -> Branch打开Create a new CVS Branch。
Tag
如果需要发布一个新的版本2.0.6,可以新创建一个Tag。步骤为右键源代码工程 –> Team -> Tag as
Version,如图。通过CVS Repository透视图可以查看相应的Tag。
Patch
补丁(patch)允许开发人员共享尚未提交到CVS的代码变更。补丁程序包含的是本地资源与CVS资源库的差别CVS Diff命令。补丁在许多场合都非常有用:
· 由于权限的限制,需要将补丁程序发送给权限用户提交。
· 需要一个临时工作区间隔离待提交的代码。
· 在提交CVS之前,需要对更改的文件测试,可以将补丁程序发送给测试人员。
要创建一个补丁,使用右键Team –> Create Patch,开启Create Patch向导完成补丁文件的创建。
这里我们将补丁程序导出成文件patch.txt。按照默认方式完成向导。patch.txt内容如下:
### Eclipse Workspace Patch 1.0
#P source
Index: AsyncGssSocketLayer.cpp
===================================================================
RCS file: /cvsroot/filezilla/FileZilla/source/AsyncGssSocketLayer.cpp,v
retrieving revision 1.14
diff -u -r1.14 AsyncGssSocketLayer.cpp
--- AsyncGssSocketLayer.cpp 4 Mar 2005 10:35:04 -0000 1.14
+++ AsyncGssSocketLayer.cpp 28 Nov 2011 07:26:39 -0000
@@ -1,6 +1,6 @@
// GSSAsyncSocksifiedSocket.cpp: implementation of the CAsyncGssSocketLayer class.
//
-//////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////
// Part of this code is copyright 2001 Massachusetts Institute of Technology
#include "stdafx.h"
patch.txt实际上是CVS Diff命令的输出,从而实现了CVS Repository之外的资源共享。相应地,开发人员可以共享补丁程序。
Apply Patch命令提供了打补丁的方法,如图所示。
比较&替换
人生没有后悔药,但是Eclipse提供了,而且特别简单。快捷菜单操作Replace With和Compare With提供了本地历史记录与CVS Repository比较与替换的机会。需要说明的是,CVS Repository的资源既可以是HEAD也可以来自某一个分支,或者某一个tag。
重命名
一般情况下,要避免对CVS Repository作重命名操作。对于工程而言,CVS对待重命名后的工程为新工程。相应地,需要使用Team -> Disconnect操作解除项目与CVS的关联,然后再对项目重命名,最后,在重新连接到CVS之后,需要像其它新的工程一样定义。而对于文件而言,重命名会导致出现一个新的文件,不过幸运的是,原文件的内容会被拷贝到新的文件中。
CVS vs SVN
至此,相信读者对Eclipse CVS客户端有一个基本的了解。不过,CVS并非是完美的。下面我们来比较下两者的一些主要的不同点,如下表。
存储类型存取速度事务总体评价
CVS文件相比SVN慢没有实现4
SVN数据库相比CVS快完全实现5
实际上,CVS是一个古老的系统,其内部结构有许多改进之处。知道今天,仍有人想重头开始,重写CVS,但都未能成功,SVN的开发人员花了很多时间与心思在改进内部结构,使其变得简单、优雅,甚至有人认为SVN是CVS的接班人。