http://bbs.51testing.com/thread-10797-1-1.html
CVS版本控制常用操作说明
在进行版本控制的过程中, CVS是国际上最流行最成熟的版本控制系统之一,它能使我们的团队更好的在一起协同工作,使各自的程序一目了然,如果软件项目当前版本坏了,还可以通过CVS方便的恢复到一个好的版本。
CVS本来是工作在UNIX,LINUX下的,不过也出现的WINDOWS版本,包括服务器端(CVSNT)和客户端(WINCVS)。我们大多的操作是在客户端也就是WINCVS端完成,针对大家在实际工作中的问题,下面列出一些具体的操作方法及解决途径,欢迎大家共同讨论,指出不足,共同进步。
1.准备工作
1.1术语
  Update---从cvs服务器下载新版本文件。当本地文件比服务器上的还新时,update将失败。
Commit---将本地更新过的文件提交到cvs服务器。如果本地文件比服务器上的还旧,commit将失败。
Import Module---将本地模块建立到服务器上(即在服务器上新建一模块)。
Checkout Module---从服务器上取出一个模块
  Revision---文件版本,是单个文件的版本而非整个项目的版本
  Release---发行版本,指整个产品的版本
   Tag---标签
1.2目录及设置
  在使用CVS之前,要在客户端电脑上建立一个空目录,用来存放CVS服务器下载下来的文件。安装好WinCvs(我这里版本为1.3)后,设置默认文件夹,点击"View"菜单,再点击"Browse Location",进入"Change"菜单,找到刚建立的空目录,点击确定即可。打开"Admin"菜单,点击"references"子菜单。在"General"页中,设置与cvs服务器有关的选项,
a.设置"Authentication"(认证方式),选择"pserver"。
b.设置"ath"(cvs服务器上的仓库根目录)。
c.设置"Host address"( cvs服务器名)。
d.设置"User name"(用户名),输入个人的cvs帐号。
e.设置"CVSROOT"参数,这是cvs专用的参数格式,如下所示:
username@servername:path
其中username是帐号,servername是服务器名,path是cvs服务器上的仓库根路径。如图

2.登录
   点击"Admin"菜单,再点击"Login…"菜单,之后出现一个password对话框,输入密码,即可登入CVS服务器。登入后,wincvs将自动记住你的密码,下次使用wincvs时,可以不用人工登录。
3.建立模块
  假设我们在本机的目录中有一个“技术研发”目录,此目录中有相关的文件,我们要将这个目录(该目录下必须有文件)作为一个模块(Module)建立到CVS服务器上。可以选择“技术研发”目录,点击右键,选择“Import Module”,如图
   
一般源代码等是TEXT格式的,而其它如图片,OFFICE文档等是二进制格式的。如果发现WinCvs列出的格式与实际的格式不符,可以在相应的项目上双击来修改格式。上传完成后,相应的目录就可以删除了。
4.Checkout、Commit 和Update操作
在WinCvs左边的树形目录上点击鼠标右键,进入"Checkout Module"菜单,输入你要checkout的模块的名字(注意大小写),再输入checkout下来后的存放目录,按"确定"按钮,这时,在WinCvs的控制台输出code 0的成功信息。表明此次操作执行成功。
如果文件内容有改变,应即时提交到服务器上。如果我们修改了一个文件储存后,文件的图标变成红色,这时在此文件上点击右键,再点击“Commit selection…”菜单,出现code0信息表示命令执行成功。如果命令执行失败,可能是另外有人修改了这个文件并提交到了服务器。即服务器上的版本可能比你现有的文件还新,这时你有三种选择:
a. 将服务器上的文件和本地的文件合并后再提交
先在文件上点击菜单命令"update…", 在弹出的对话框上什么都不要选,点击确定按钮,执行,合并后的文件前面有一个M标记。
b. 用本地的文件将服务器上的文件覆盖
在文件上点击菜单命令"commit…",在出来的对话框上切换到Commit options页,选择Force commit,如下图,

按确定,命令执行。
c. 用服务器上的文件将本地文件覆盖
在文件上点击菜单命令"update…",在出现的对话框中选择Get the clean copy,如果是在目录下有新目录增加,可选中Create missing directories that exist in the repository如下图,
      
按确定,命令执行。(注:如果选择的是目录进行Update,选中了Do not reurse into sub-folders意味着不对该目录的子目录进行Update;另外如选中 Reset any sticky date/tag/’-k’ options 意味着对选择对象标注的时间、标签进行重新设定)
更新过的文件为绿色,前面标有U标记。同时,WinCvs会自动在此文件的当前目录备份更新前的文件,文件名前面会加上".#",后面会加上版本号。
5.Add文件
   如果在本机目录中新建了文件,必须用Add命令将它添加到cvs服务器,要将此文件加入到cvs,请先选择它(如有多个文件,可以多选),点击"Modify"菜单中的"Add selection",如果是二进制文件,点击"Add binary"菜单,命令执行后,控制台的输出信息如下,返回代码为0表示命令执行成功。执行后文件前的图标变为红色,cvs就认为这是修改过的文件,你还必须用前面提到的Commit方法将文件提交到cvs服务器。也可以用点击快捷栏里的图标进行相关操作,如图
      
6.Remove文件
如果要将cvs中的文件删除,不能简单的将它从本机目录中删除,而必须借助Remove命令。不然的话,当你下次Checkout module时,在本机删除的文件又从服务器下载下来了。
假设我们现在要从cvs中删除newfile.txt文件。请先选择此文件(如有多个文件,可以多选),点击"Modify"菜单,再点击"Remove"菜单命令,这时控制台的输出code0成功信息,这时此文件已被做了删除标记,文件前的图标变为红色。
如要真正的从cvs服务器上删除此文件,还必须再执行一次commit命令。
7.Remove空目录
在WinCvs中只提供了删除文件的功能,如要删除一个目录,必须先将这个目录中的文件用上面介绍的方法清空,然后再在WinCvs的树形菜单中选中你要删除的目录的上层目录,将光标移到控制台窗口中,输入以下命令:cvs update –P
完成后再执行一次update命令,即完成删除,也可以点击右键选择Update selection..操作。
8.查看比较文件版本的历史沿革和差异
我们对一个文件,进行了多次修改和提交,使版本不断的升高,我们需要查看文件的版本历史,选中文件,然后选择主菜单Query,选择“Graph”菜单项,如图
  
如果比较两个版本的差异,在图中选择两个要比较的版本,比如比较1.4与1.2版本,先用鼠标选中1.4然后按下Ctrl键再选中1.2,在主菜单Graph中,选中Diff菜单项,就可以比较两个版本的差异了。
如果想获得文件的任意某个版本,先选择文件,进行Update操作,在Update的对话框中点击“Update option”栏目,在“By revision/tag/branch”处打上钩,并填写想取回的版本号,点击确定就可以了。
9.统一版本
  如果在整个的开发过程中达到了某个稳定阶段,我们需要一个统一的固定版本号,而此时不同的文件修改的情况不同,需要进行版本号的统一。统一某一模块的版本号,在Checkout Module的时候,在弹出的Checkout settings对话框中选择Checkout option子栏目,然后钩上“Force revision/branch”,然后在它右边的编辑框中输入想提升的高版本号,注意这个版本号应该大于工作目录下所有文件的版本号。接着在刚选中的Module上执行一次Update操作,我们需要在弹出的“Update settings”对话框中钩上“ Reset any sticky tag/date/tag/’-k’options”,去掉tag,以免影响今后的文件修改提交。

10.标签(Tag)
标签是cvs中对文件版本的一种文字描述,使用它是为了能够对版本进行有意义的表述,方便版本的存取。如在开发的过程中,某个文件或整个目录、Module达到了稳定状态,此时在此版本号上加一个Tag,起名stable。在选中需要加标签的文件或目录、Module,然后在主菜单Modify中,选择“create a tag on selection”,在New tag name 栏中填写stable,确定完成,在版本的历史图中更为清晰。还有在Update时,可以专门指定Update指定的Tag,在Update options中钩选Retrieve
rev./tag/branch,右拦输入指定的Tag值,如我们刚创建的stable,点击确定就可以Upadate该标签的版本内容。
11.有关Branch的使用
  如果软件已经达到了一个相对稳定的状态,下一步是想试验一种新加的功能,担心加入新内容后系统变的不稳定,希望能方便的回到目前的稳定状态,如果新内容加入后效果不错,也希望在这个基础上继续开发,此时可以用Branch来处理,把某些版本的变化与开发主线分离开。首先选定要创建分支的文件(或子目录或整个Module),选择主菜单Modify下的create a branch,先钩选“Check that the files are unmodified before branching”,在 create branch编辑框中填写分支名称,点击确定就可以啦 。接下来就是要进入分支进行工作,进行Update 操作,在Update settings的对话框中,钩上“Create missing directories that exist in the respository”,在Update settings的对话框中,选择“Update options”中钩上“Retrieve rev./tag/branch”,并填写分支名,如“try_branch”,见下图,按“确定”按扭,工作目录下主文件消失了,branch文件出现了,就可以按一般的文件进行修改和提交了。

  如果想从分支回到开发主线,有两种情况,一是把分支的工作带到主线上来,另外就是不带入主线,选择Module块进行Update操作,在Update settings对话框中,钩上“Create missing directories that exist in the repository”,“Reset any sticky date/tag/’-k’options”,如果不想把分支的工作带入主线直接点“确定”就可以了。如果想接受分支工作,那么就进行Merge工作了,在Merge option栏,选择“Only this rev./tag”,并填写要Merge的分支名,点击确定即可,如下图:

最后在进行一次Commit就可以完全把分支的工作合并到开发主线上了。在版本的历史图中,可以看到,如下图:


12.补充
另外还有两个常用的命令:
cvs ls    :列出CVS服务器仓库中的模块名

cvs lsacl :列出目录或文件的访问管理列表

目前的CVS服务端、客户端有较新的版本,但也存在Bug,建议不要盲目下载新版本,可能不稳定,从而给工作带来不必要的麻烦。
有时WinCVS会变得异常缓慢
1). 确认安装了WinCVS的机器上没有安装CVSNT服务器端,因为它们使用的版本有可能不一致。
2). 只安装了WinCVS,但以前安装过其它版本的WinCVS, 先卸载所有的WinCVS系统,删除安装目录下的残留文件。
3). 打开注册表编辑器,全程查找cvs关键字,找到一个删除一个,一直到找不到为止。
4). 重新安装WinCVS,这个问题基本上就可以解决了。