You are on page 1of 116

精通版本管理系统之

——WinCVS

作者:风中叶(张龙)

博客(CSDN 专家博客)

http://blog.csdn.net/ricohzhanglong

微博:http://t.sina.com.cn/fengzhongye

北京圣思园教育科技有限公司

http://www.shengsiyuan.com

2010 年 7 月 31 日
精通版本管理系统之 WinCVS 作者:风中叶(张龙)

声明

北京圣思园教育科技有限公司是一家面向高端培训的专

业教育公司,旨在通过高端的 IT 培训与严格的英文阅读技能

的培养为广大 IT 企业输出适合企业需求的高素质人才。

圣思园的讲师均来自于国内各大知名 IT 公司,具有深厚

的开发经验与专业的授课经验。

圣思园的目标是:为企业培养合格的人才。

圣思园的官方网站是:http://www.shengsiyuan.com

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


精通版本管理系统之 WinCVS 作者:风中叶(张龙)

目录
1 前言 ............................................................................................................................................... 4
2 CVS 工作原理 ............................................................................................................................... 5
3 CVS 基本概念 ............................................................................................................................... 6
4 WinCVS 的工作模式 .................................................................................................................... 8
5 WinCVS 使用 .............................................................................................................................. 10
6 WinCVS 实用操作 ...................................................................................................................... 45
7 文件比较工具.............................................................................................................................. 81
8 使用 Eclipse 协同 CVS 进行版本管理 ...................................................................................... 91
9 后记 ........................................................................................................................................... 116

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


精通版本管理系统之 WinCVS 作者:风中叶(张龙)

1 前言

CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版


本管理.如果大家曾经参与过多人协作开发的项目,大家肯定有这样的痛苦
经历:由于多个人同时修改同一个文件,自己辛辛苦苦修改的程序被别人彻
底删除了.另外,如果你的软件/程序已经发布了四个版本,而这时候用户需
要你修改第三个版本的东西,也许你会因为只保留了最新版本而痛哭流涕。
如果你修改了别人的源程序,不过只是修改了很少的一部分,比如增加了一
个方法,这时你想让其他人看到你对这个程序的修改部分,而不是让大家对
全部程序都阅读一遍,那么采用与 CVS 搭配使用的文件比较工具将会大大提
高工作效率。
采用 CVS 进行版本管理的另一个好处是你不用自己备份自己的源程序,
否则一个项目进行下来,可能备份的程序连你自己都搞不清楚版本了,不过
不要紧,有了 CVS 这一切都变得异常简单,你所要做的仅仅是将自己的代码
的每一个版本提交一份到服务器上,其他的一切都由 CVS 为你做好了。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

2 CVS 工作原理

CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部


分.与我们平时工作息息相关的部分是客户端,它也是我们天天与之打交道
的部分,至于服务器端只要在最开始设定好,以后基本就不必再进行其他操
作了。

CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里
可以存放许多不同项目的源程序.由仓库管理员统一管理这些源程序.这样,
就好像只有一个人在修改文件一样.避免了冲突.每个用户在使用仓库之前,
首先要把仓库里的项目文件下载到本地.用户做的任何修改首先都是在本地
进行,然后用 CVS 命令进行提交,由 CVS 仓库管理员统一修改.这样就
可以做到跟踪文件变化,冲突控制等等.

使用 CVS 进行版本控制需要服务器端和客户端两个软件,在 Windows


操作系统下客户端软件就是 WinCvs,我采用的版本是 WinCvs 1.3.17.1 Beta
17(Build 1),而服务器端软件是 CVSNT,我采用的版本是 CVSNT 2.0.41,经过
实际使用,二者配合很好,没有发现不兼容的现象,因此也推荐大家采用这
两个版本进行搭配(如果二者版本不兼容,可能会产生一些莫名其妙的错误),
这两个软件都是免费的,网上很多地方都有下载的。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

3 CVS 基本概念

CVS 是很早的时候在 Unix 下发展起来的,它使用的术语比较特殊,需要先


熟悉和理解,这是使用 CVS 的第一步。
Repository: 中文名称:仓库。它是 CVS 服务器(可能在远程,也可能在
本地)的根目录,我们所有的工作都保存在这个仓库中,包括源代码和这些代码
的全部历史。你可以把 Repository 想象成一个仓库,仓库中有许多“木桶”,每个
“木桶”就是我们的一个让 CVS 管理起来的工程。对于 CVS 来说,这些“木桶”之
间是没有什么关联的,删除一个“木桶”不会影响别的“木桶”。我们所想象的木桶,
在 CVS 术语中,又叫模块(Module)。
Module:中文名称:模块。就是上面我们所想象的仓库中的“木桶”,里面
放的是一个项目的所有文件(包括源代码,文档文件,资源文件等等)。在物理
上,Module 是 CVS 服务器根目录下的第一级子目录。
Import:中文名称:导入。我们本地有一个软件项目,里面有许多各种类型
的文件,都需要用 CVS 进行版本管理,那么第一步就是把这个软件项目的整个
目录结构都 Import 到 CVS 的仓库中去。经过这种导入,CVS 将为你的项目创建
一个新的“木桶”----Module,即模块。
Checkout:中文名称:导出。指将仓库中的一个“木桶”(Module, 模块)中的
东西导出到本地的工作目录下,然后我们可以在 WinCvs 的管理下,进行工作,
修改其中的内容。
Commit:中文名称:提交修改。我们在本地的工作目录下,对工程中的文件
进行修改,这些修改,需要提交给 CVS 的仓库,这个过程,就叫 Commit。你可
以 Commit 一个文件,也可以 Commit 整个目录。
Update:中文名称:同步。它与 Commit 相对应,是从仓库中的“木桶”(模
块)中下载你同事修改过的文件(别忘记你的项目有许多人共同参与),如果这
个文件在你本地也有,就会更新本地的拷贝,如果你本地没有,就会把新文件下
载到你的本地。
Revision:中文名称:文件版本。这是 CVS 中一个需要特别注意的概念,
它指的是单个文件的版本,而不是整个项目的版本。基本上,单个文件每次的修
改,经过 Commit 之后,它的 Revision 都要改变一次,比如从 1.1 到 1.2 到 1.3
等等。特别要注意,单个文件的版本(Revision)与整个工程产品的版本(Version,
或者 Release)可以没有任何关系。例如,整个产品现在发行 1.0 版本(Version 1.0)
了,但是产品的源代码文件中,有的文件版本(Revision)可能是 1.9, 有的是 2.1,
等等。这很容易理解,因为为了发行产品 V1.0,我们需要对源代码进行多次修
改编译。
Release:中文名称:发行版本。整个产品的版本,例如 VC5.0, VC6.0 等。
Tag:中文名称:标签。在一个开发的特定期,对一个文件或者多个文件给
的符号名,一般是有意义的字符串,如“stable”,“release_1_0”等。比如,我们对
某个文件的 1.5 版本加上标签:“memory_bug_fixed”,借助这个有意义的标签,
我们可以理解 1.5 版本解决了内存 Bug,所以说 Tag 赋予了版本一些文字含义。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

以上这些概念是我们在使用 CVS 时经常遇到的,大家将会在实际使用中


进一步加深对这些概念的理解

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

4 WinCVS 的工作模式

由于 CVS 是在 Unix 下发展起来的,所以它的使用需要采用命令行的方


式,这对于广大使用 Windows 操作系统的用户来说,是极其不方便的,因为
命令行本来就难以记忆,而每个命令又带有很多参数,不过幸运的是 WinCvs
的出现,它是 Windows 操作系统下一个图形界面的 CVS 客户端工具,用户
只需要使用菜单与工具按钮就可以完成同样的命令行操作,就象我们使用其
他 Windows 下的软件一样,大大降低了使用难度。同时它也提供了命令行的
工作方式,用户同样可以使用命令来完成同样的操作。

使用 WinCvs 的基本流程如下:

1) 您首先要让 CVS 管理员给您分配一个用户名和密码,先使用


WinCvs 登录(Login)到 CVS 服务器。
2) 把本地需要 CVS 管理的原始目录导入(Import)到 CVS 服务器
上去,使之成为 CVS 服务器上仓库(Repository)的一个 Module。
3) 在本地硬盘上创建一个工作目录。
4) 从 CVS 服务器的仓库(Repository)导出(Checkout)一个 Module
到本地硬盘的工作目录
5) 从 CVS 服务器同步(Update)你同事的修改到你本地工作目录。在
工作目录上进行工作,在这个过程中,把文件的中间版本(Revision)
提交(Commit)给 CVS 服务器。

当您已经进行过上述流程,以后再使用时,就简化成只需要步骤 1)和步骤
5)就可以了。 也就是说我们只需要在第一次使用 WinCvs 时需要进行这五步操
作,以后再次使用时甚至连第一步都不需要,只是不断的重复第五步操作就可以
了。

从 WinCvs 的工作模式可以知道,WinCvs 的工作涉及三个目录:一是原始目


录,我们从这里把文件导入到 CVS 进行管理,从此以后这个目录下的文件就不
再参与 WinCvs 活动了;二是 CVS 仓库目录,所有的 Module 都存放在这里,它
可能是远程 Linux 下由 CVS 服务器管理员创建的,也可能是你自己在本地硬盘
创建的,这决定于你工作在哪种模式下;三是您本地硬盘的工作目录,您在这里
对文件进行多次修改和提交。

说明:对于在 Windows 下工作的用户来说,登陆使用的用户名和密码就是


我们登陆系统时使用的用户名和密码,也就是说你需要知道服务器的登陆用户名
和密码,如果一个开发小组有四个开发者,那么需要在服务器上创建四个账号(就
是 Windows 的账号),分配给这四个开发者,每个开发者凭借自己的账号和密码
来登陆进 CVS 服务器,一般来说这个操作只需要进行一次,以后再次打开
北京圣思园教育科技有限公司版权所有 (All Rights Reserved)
深入浅出系列之一_WinCVS 作者:风中叶(张龙)

WinCvs 客户端时就可以直接进入了,因为成功登陆后将在你的目录建立一
个 .cvspass 文件,所以以后就不用输入口令了。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

5 WinCVS 使用

这一章,我们将开始进入 WinCvs 使用阶段,通过实际的操作来掌握


WinCvs 的使用方法。
首先,我们需要先下载一个 WinCvs,然后安装,其安装方式与其他软件
的安装方式没有什么不同,直接 next 下去,然后 finish 就可以了。
接下来我们需要安装 cvs 服务器端软件 cvsnt,其安装方式也是很简单,
在这里就不赘述了。
我们首先启动 cvsnt
在开始菜单中找到 cvsnt 这个目录,然后找到其子目录中的 Service
control panel 选项,就是一个绿色的小鱼的图标,打开它。

这是 cvsnt 的控制面板,界面很简单,从这里大家可以看到,cvsnt 已经
注册了两个系统服务,一个是 CVS Service ,另一个是 CVS Lock service,现
在这两个服务已经启动,大家可以到系统服务中去查找这两个服务

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

点击开始菜单,然后选择运行,输入命令 services.msc,确定。

出现系统服务界面

从这里大家已经看到,这两个服务已经启动,如果大家不想启动这两个
服务,那么可以在这里将其关闭,也可以在 cvsnt 面板中将其关闭,不过关闭
后 cvsnt 服务器将无法使用,所以不要关闭这两个服务。

现在我们再回到 cvsnt 的控制面板 Service control panel。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

选择 Repositories(就是我在之前介绍过的仓库,我们的所有项目都放在
这个仓库中 )选项卡。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

由于之前没有建立仓库,所以目前是空的,下面我们来建立一个新的仓
库。点击 Add 按钮。

点击后面的浏览按钮。

这时出现我们本地硬盘的文件夹。我们准备将我们的仓库放在 F 盘的根
目录。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然后我们新建一个文件夹,名字叫 Server(名字可以随意起)

然后点击确定即可。

点击 OK。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时出现一个对话框。

这是问你该目录已经作为了 cvsnt 的仓库,不过还没有初始化,是否现在


初始化,点击是,cvsnt 会将该目录初始化,放入一些 cvsnt 的系统文件。

这样一个新的仓库就建好了,我们现在到这个目录中去看看,看多出来
一些什么东西。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家可以看到,在我们的 Server 目录中多出来一个 CVSROOT 的子目录,我


们进去看一下

这里面就是 cvsnt 为我们的仓库初始化的一些系统文件,它是 cvsnt 进行文件管


理所用的,我们不会直接使用他们。
北京圣思园教育科技有限公司版权所有 (All Rights Reserved)
深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们再回到 cvsnt 的控制面板 Service control panel。

还有另外两个选项卡:Advanced 和 SSL settings.这两个选项卡我们不必管,


按照默认值就可以了
到这里我们的 cvsnt 服务器就建立好了,以后我们项目的所有代码都会提交
到服务器上,由 cvs 为我们管理。
不过到这里服务器端的事情还没有做完,不知道大家是否还记得,我们使用
WinCvs 的第一步就是要登陆到服务器,所以我们需要在服务器端创建一个新的
账号和密码(这里假设只有一个客户端),也就是在服务器端新建一个系统用户。

点击开始—>设置—>控制面板

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

双击用户帐户(我的系统是 Win XP, Win2000 可能有细微不同)

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们选择新建一个新帐户
在这里我创建的新帐户用户名为 zl,密码为 1234567。这个帐户和密码就是我
们后面使用 WinCvs 登陆服务器使用的帐户和密码。
到现在服务器端的工作我们就全部完成了,下面开始进入客户端 WinCvs 的
使用,这也是与我们平时工作关系最为密切的一部分。
点击开始—>程序—>WinCvs—> WinCvs(就是一个黄色的小鱼的图标)
这就是 WinCvs 的界面,大家在第一次进入时界面可能有些不同,不过没关
系,这些都是可以设置的

左边是目录信息窗口,右边是文件信息窗口,下面是信息输出窗口。

使用 WinCvs 之前需要先进行一些参数设置,这些设置只需要在第一次进行,
以后再使用时就不需要设置了。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这里大家需要明确一下 WinCvs 的工作模式,我在之前已经说过了,下面再


详细说一下,首先我们需要在本地新建一个工程,当然开始时这个工程是一个空
工程,然后把这个工程 Import 到 cvs 服务器上去,接着开发小组的其他程序员
分别从 cvs 服务器上将这个工程 Checkout 到本地,从这时开始大家的代码便统
一由 cvs 服务器来管理了,也就是说大家可以与 cvs 服务器进行交互,可以进行
Commit,Update 等操作,而之前那个空工程的使命也就结束了,以后的所有工
作都与它无关了。
好,喝杯咖啡振奋一下精神,开始我们的 WinCvs 之旅。
我们首先在本地硬盘上建立一个空工程,然后将它 Import 到 cvs 服务器上
去。
我们在本地 E 盘的根目录下建立一个文件夹,名字叫 Empty.然后在这个文件
夹下面新建一个文本文件 test.txt

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然后我们在这个文本文件中写一些内容。保存,关闭。

这样一个空工程我们就建立好了,在实际使用中,比如用 Eclipse 进行开发,


我们可以先建立一个 Eclipse 项目,然后将这个项目 Import 到 cvs 服务器上去,
不过由于 Eclipse 已经内置了 cvs 功能(使用插件),因此使用起来会更加方便,
我在之后还会专门讲述使用 Eclipse 进行 cvs 管理。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

现在我们回到 WinCvs 主界面

选择菜单 View—>Browse Location—>change…切换到我们之前建立的那


个空目录 Empty。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

点击确定。
WinCvs 界面如下

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家可以看到,在目录信息窗口中出现我们之前建立的那个空目录 Empty,
并且在文件信息窗口中出现了我们之前建立的文本文件 test.txt.
同样的操作也可以使用快捷按钮来完成,就是菜单栏下面的那个目录窗口右
边的浏览按钮,在 WinCvs 中有很多快捷按钮来完成与菜单同样的功能操作
接下来,我们将配置我们的登陆参数和其他一些相关的系统参数以便登陆到
cvs 服务器。
选择菜单 Admin—>Preferences… 或者是 ctrl+F1 快捷键

这里面的各个参数都很重要,有一个配置不正确便无法成功登陆到 cvs 服务
器,下面我来逐个讲解每个配置参数的意义与作用。
Authentication:指的是认证方式,cvs 提供了多种认证方式登陆

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

其中我们平时使用最多也是最为常用的认证方式是 pserver 方式,所以在这


里大家选择这个认证方式就可以了
Path:指 CVS 的 Repository(即仓库)的存放路径。注意,这个路径是指仓
库在服务器上的存放路径,对于我们应用来说,由于我之前建立仓库的时候选择
的路径是 F 盘根目录下的 Server 目录,所以我们这里需要填写:F:\Server
Host address:指 cvs 服务器的主机地址,填写 ip 地址就可以了,我的服务器
地址是 192.168.1.4,如果大家的客户端和服务器在同一台机器上,那么填写:
127.0.0.1 就可以了
User name:指我们登陆时使用的用户名,我刚才已经新建了一个帐号 zl,所
以这里填写:zl
CVSROOT:以上所有内容都填写完毕后,这里会自动根据你所写内容进行
填充,我们不需要直接填写这里面的内容。
以上就是我们登陆 cvs 服务器需要的一些系统参数,有了这些参数我们就能
登陆进 cvs 服务器了。
这里还有其他一些选项卡,我简略的说一下,大家可以在实际使用中自己摸

选择 Globals 选项卡

这里面只有两处需要大家注意
第一个是 Checkout read-only,意思是从服务器上 Checkout 的文件都是只
读的,因为大家都需要对从服务器上 Checkout 的文件进行修改,然后提交,所
以这一项一定不要选
第二个是 Quiet mode,意思是信息输出窗口只输出很少的信息,这对于出
错时大家排错很不方便,所以也一定不要选

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

选择 WinCvs 选项卡

这里面有两个地方需要大家注意
第一个是 External diff,意思是文件比较工具的选择,默认的情况下该选项
是不被选中的,那么文件比较的信息就会出现在 WinCvs 界面下放的信息输出窗
口中,这对于大家查看信息是很不方便的,所以我们在这里选择一个外部的文件
比较工具 WinMerge,在后面我会讲解该软件的使用方法,它大大方便了我们对
于代码文件的比较工作。
Default:是 WinCvs 默认的代码查看工具。默认为记事本(Notepad)当然我
们也可以在这里选择其他一些好用的文本文件查看工具,比如 EditPlus 或者
UltraEdit 等
点击确定按钮。

好,到这里我们的一些准备工作就完成了,下面我们来登陆进 cvs 服务器。

选择菜单 Admin—> Login…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

点击确定按钮。

这时出现输入密码的对话框,我们输入之前我们建立的帐户 zl 的密码
1234567

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时大家注意观察 WinCvs 界面下面的信息输出窗口,出现 CVS exited


normally with code 0

cvs 在操作成功时的标志代码是 0,如果出现错误时,标志代码是 1,那么


就说明操作没有成功,如果大家的代码也是 0,那么就说明已经成功登陆进了 cvs
服务器,如果出现 1,请大家仔细检查自己之前的参数配置。

接下来我们要做的就是将之前建立的工程 Empty 目录 Import 到服务器上的


仓库中

右键点击目录信息窗口中的 Empty 文件夹,选择 Import Module…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现上面的窗口,该窗口是输出一些信息,比如你要 Import 的工程中含有二


进制文件(比如图片等),那么 WinCvs 会自动发现,对于没有自动发现的需要
自己手动修改一下,因为 cvs 对于文本文件和二进制文件的处理方式是不同的。
这里提示信息是 ok,我们直接 Continue 即可。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现上面的窗口,我们可以根据自己的需要修改一些参数值。

在 Import Settings 选项卡中,请注意 Module 选项


在 Repository 中需要我们设定服务器上的 Module 名,也就是我们将我们的
Empty 目录 Import 到 cvs 服务器上后,该目录在服务器上的名字,一般不用修改,
也叫做 Empty

下面的几项采用默认就可以了
在下面那个比较大的输入框中你可以输入一些日志信息,方便以后查看,不
输入也无妨。
接下来选择 Import options 选项卡

这里列出了你想 Import 的本地目录,WinCvs 已经给我们填写上了 E:\Empty


我们就不必再修改了,其他选项保持默认值就可以了

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

好了,到这里我们的配置就完成了,点击确定按钮。

大家可以看到在信息输出窗口中出现的信息,结束代码是 0,说明我们的操
作成功,我们已经成功将 Empty 这个目录 Import 到 cvs 服务器上了。如果有的
人的结束代码是 1,那么请仔细检查自己的参数配置。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

好了,到这里我们已经将我们的目录 Import 到 cvs 服务器上了,我们到 cvs


服务器的 Server 仓库中看看里面多出来了什么东西。

大家进入到 F 盘的 Server 目录下,发现里面多出来一个文件夹 Empty,这个目录


就是我们刚才 Import 到服务器上的,进入这个目录。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家发现里面有两个文件,而且文件名很奇怪,一个叫.owner,另一个叫 test.txt.v

这是 cvs 服务器给文件起的名字,一般来说我们不需要理会他们,因为我们只与
WinCvs,也就是客户端打交道

不过,为了满足大家的好奇心,我们用文本工具 EditPlus 打开.owner 这个文件

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家发现里面的内容就是我们登陆的用户名 zl,原来.owner 这个文件存放的是客


户端的用户名

我们再用 EditPlus 打开 test.txt.v 这个文件(文件太长,我分成两个屏幕)

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这里面记录着该文本文件的内容,版本历史,提交日期等一切与该文件相关的所
有信息,

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

绿色的内容是该文本文件的内容,就是我刚才建立该文件时输入的内容:This
is a test.

如果今后有人对该文件进行了修改,那么所有的相关信息都会记录在该文件
中去的。

到现在为止,我们已经将一个新建的工程 Import 到了 cvs 服务器上去了,接


下来,小组的其他开发人员便可以从服务器上 Checkout 该工程了,那么之前我
们建立的 Empty 目录的使命就结束了,我们之后的工作便与它毫无关系了,让
我们继续。

我们现在需要从 cvs 服务器上 Checkout 该目录作为我们开发的基础,我们首


先在本地硬盘建立一个新的目录 Client,该目录建立在 E 盘根目录下。该目录作为
我们存放从服务器上 Checkout 下的工程的目录

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然后将 WinCvs 的工作目录转到该目录下

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

在目录信息窗口中右击 Client 目录,选择 Checkout module…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这里面一般只有一项需要我们配置,那就是我们需要从服务器上 Checkout
的 Module 的名字,在我们的应用中,我们已经知道该 Module 名字叫 Empty,所
以在这里面我们填写:Empty

下面的 Local folder to checkout to 意思是从服务器上 Checkout 的 Module 存


放在本地的路径,在这里 WinCvs 已经为我们配置好了,我们就不需要更改了。

其他选项都不必改动,保持默认值就可以了,点击确定按钮

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到 WinCvs 结束代码是 0,说明 Checkout 成功执行,在目录信息


窗口中我们已经看到了 Empty 子目录,该子目录就是我们刚刚从服务器上
Checkout 的,下面我们到 Client 目录下看看里面多出来什么东西。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现里面多出来一个 Empty 文件夹,这就是我们刚刚 Checkout 下来的


Module,进去看一下

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

里面有一个文本文件 test.txt 和一个隐藏文件夹 CVS,我们打开该文本文件看看


里面的内容是什么。

这正是我们建立该文件时所写的内容,可见我们已经成功将该工程 Checkout 到
本地了,从次之后,Client 下面的这个 Empty 就与 cvs 服务器发生了直接关系,
它的任何改动都将反映到服务器上去,也就是说从现在开始小组开发人员可以依
靠 cvs 进行协同工作了

下面我们再进入 CVS 这个隐藏文件夹,看看里面有什么文件

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到里面一共有六个文件,这是 CVS 服务器在本地保存的文件,用于


服务器进行一些管理工作,不要将这些文件删除。今后我们每新建一个文件夹,
里面都会有这个 CVS 隐藏目录的,而且目录里面都有这些文件的

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

6 WinCVS 实用操作

以上我们完成了进行 WinCvs 操作的准备工作,上面介绍的操作过程只


需要进行一次就可以,在下一次操作中,我们就可以在搭建好的环境下进行
工作,本章主要介绍 WinCvs 的主要操作,也是与我们平时关系最为密切的
一些常用操作。
还是以我们之前的结果作为开始。打开 WinCvs

如果我们想查看某个文本文件,可以右键选中该文件然后选择 Edit with


Editor,那么 WinCvs 就会我们指定的文本编辑器来打开该文件,我们的默认文本
编辑器是记事本

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这是打开后的效果。
我们现在更改该文本文件,加入下面一些文字

保存,关闭。

这时大家会发现在 WinCvs 的文件信息窗口中,该文件名用红色字体标明了

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这是 WinCvs 的一种提示方法,它告诉你该文件已经被你改动了,并且与服
务器上该文件的版本不一致了,我们可以看到现在该文件的版本是 1.1.1.1,接
下来我们将这个改动提交(Commit)到服务器上去,右键选中该文件,选择
Commit Selection…选项

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

在上面那个比较大的文本输入框中你可以输入一些日志信息,不输入也没有
关系,然后点击确定

这时大家看到信息输出窗口中出现一些信息,并且结束代码为 0,说明我们
的提交操作是成功的,这时 test.txt 文件名又变成了白色,并且版本已经变成了
1.2,说明我们已经将该文件提交到了服务器中了,我们到服务器中看看那里面
发生了什么。
北京圣思园教育科技有限公司版权所有 (All Rights Reserved)
深入浅出系列之一_WinCVS 作者:风中叶(张龙)

用 EditPlus 打开 test.txt.v 这个文件

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到我们对于该文件的改动已经反映到了服务器上,在服务器上的该文
件中已经增加了我们刚才加入的那些文字:This is what I have added.

以上介绍的是 Commit 即提交操作,它是与我们日常工作关系密切的一个操


接下来我将介绍 Update 即更新操作。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

右键选择 test.txt 文件,选择 Update Selection…

这里面有一些选项需要大家注意
第一个是 Get the clean copy,大家一定要慎重使用这个复选框,它的含义是

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

从服务器上得到完全的拷贝,并且覆盖本地的同名文件,如果选择了这一项,那
么本地上你所做的全部工作都将丢失,因此在实际工作中该项一般是不选的,一
旦误操作那么所有的工作都将全部丢失。
还有一个是 Create missing directories that exists in the repositories,它的含义是
如果服务器上含有你本地没有的文件夹,WinCvs 会自动在你本地创建该文件夹,
否则不会在本地创建该文件夹,那么你本地的文件就会比服务器上少,所以一般
这个选项需要选上,除非你能保证同一个开发小组的其他人员没有创建新的文件
夹。
我们点击确定。

这样 Update 操作就完成了,由于我们现在是一个人在使用,所以文件本
身没有任何变化,如果是多人协同开发时,当其他的开发者对文件进行改动后,
你 Update 后就会将其他开发者的改动更新到本地,你可以在本地的文件中看到
其他人对文件的改动。

注意:Checkout 与 Update 的区别

Checkout 是把 CVS 服务器上的 module 下载到本地进行工作。该操作一般只


在项目开发的最初进行一次。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

Update 主要同步本地文件(目录)和 CVS 服务器库中相应文件(目录)之


间的差异,使本地相应文件是最新版本,另外 Update 也能执行获取文件旧版本
的操作。

注意:

“先更新 后工作”。每次使用 WinCvs 开始工作前,应该先 Update 一次,这


样我们就能在文件的最新版本上工作。

下面介绍增加文件操作:

我们现在在 Empty 目录下再增加一个文本文件,名字叫 add.txt,写上如下内


容:This is another file.

保存,关闭。

现在 Empty 目录下的文件如下:

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

现在我们回到 WinCvs,看看那里发生了什么变化

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们可以看到这里面也多出了一个文件,就是刚才我们新加入的那个文件
add.txt,不过它前面的图标是一个问号?这是 WinCvs 的一个提示信息,它的意思
是说该文件在你本地硬盘上存在,不过在服务起上并不存在,现在我们将它加入
到服务器上。

右键选中 add.txt 选择 Add selection

这时,add.txt 文件前面的图标变成了红色,并且有一个字母 A,它也是 WinCvs


的一个提示信息,意思是说,这个文件是新加入到服务器中的,但是并没有提交
(Commit)过,这时该文件只是逻辑上增加到了服务器上,物理上并没有真正加入
到服务器上,大家看一下服务器上的文件就明白了

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这是服务器上的文件,我们可以看到并没有 add.txt 这个文件

现在我们将 add.txt 提交(Commit)到服务器上,方法与之前介绍的提交方


法一样。我们再来看一下 WinCvs

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

可以看到,该文件前的图标已经变成了白色,说明该文件已经提交到服务器
上了,我们再来看看服务器上的文件。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家可以看到,服务器上多出了一个 add.txt.v 文件,这就是我们刚才提交的


那个文件。
下面我们在 Empty 目录下新建一个子目录,名字叫 child

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然后在 child 目录下新建一个文本文件,me.txt,写上如下内容:hello world

保存,关闭

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时我们看看 WinCvs 发生了什么

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们新增加的目录已经出现在 WinCvs 中了
我们将 me.txt 文件增加到服务器中,操作方式与之前介绍的一样

这时问题出现了,因为 WinCvs 的结束代码是 1,提示信息是:No such file or


directory
出现该问题的原因是这样的:在我们将 me.txt 增加到服务器上之前,我们并
没有将它所属的父目录 child 增加到服务器上,WinCvs 不会因为你将目录中的文
件增加到服务器而将它所属的目录也增加到服务器上,因此必须先将目录增加到
服务器上,然后再将目录下的文件增加到服务器上,因此我们需要先将 child 这
个目录增加到服务器上。方法与之前介绍的一样,然后再将该目录下的文件
me.txt 增加到服务器上。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

增加目录之后,child 前的图标由之前的空的变成了现在的一个勾,这说明该
目录已经增加到服务器上了,接下来我们再将 me.txt 增加到服务器上,方法如前
所述

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然后再进行提交(Commit)操作,方式如前

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时,me.txt 文件已经提交到了服务器上了,我们再到服务器上看看那里多
出了什么文件

可见,服务器上多出了 child 目录,进入该目录

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现 child 目录中存在一个 me.txt.v 文件,这就是我们刚才增加的文件。

注意:

增加文件到服务器之前一定要先将该文件所属的目录增加到服务器上,cvs
不会因为文件的增加而自动将该文件所属的目录也增加进去。

使用主菜单 Add 命令添加子目录时,WinCvs 不会自动把子目录中的内容添


加到 CVS 仓库中,您需要自己手动添加。

如果新增加的文件在 WinCvs 无法反映出来,那么请选择菜单 ViewFile


Filter 把里面的 Hide Unknown 复选去掉即可

下面介绍删除文件的方法

删除文件有两个命令,一个是 Remove,一个是 Erase,都在主菜单 Modify 下


面。 其中,Remove 是同时把文件从本地和远程仓库删除掉,而 Erase 是删除本
地文件,不动远程仓库中的版本。

下面我们来分别进行介绍,首先介绍 Remove 命令

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

Remove 是同时把文件从本地和远程仓库删除掉,这里我们对 add.txt 文


件进行删除。右键选择 add.txt 发现菜单里面并没有 Remove 命令,这是因为我们
没有将该命令加入到快捷菜单中,有两种方法可以解决这个问题。
第一个是 WinCvs 的菜单中选择,选择 Modify—>Remove 命令
第二个是配置快捷菜单的内容,右键选中 add.txt 文件,从快捷菜单中选
择 Customize this menu 命令

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

在这里我们可以重新配置快捷菜单的内容,增加,删除一些选项,我们将
Remove 命令增加到快捷菜单中。

点击 ok,关闭窗口。

这时快捷菜单中已经出现了 Remove 命令,我们选择该命令对 add.txt 进行删


除操作。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到 add.txt 前面的图标变成了红色,并且有一个叉号,这说明该文件已


经进行了删除操作,但是该删除操作只是将本地的 add.txt 进行了删除,还没有
对服务器上的文件进行删除,这时我们看看本地文件和服务器上的文件进行一下
对比。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

上面是本地文件,可以看到 add.txt 已经被删除了


下面我们再来看看服务器上的文件

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到 add.txt.v 文件还存在,说明它还没有被真正删除,要想将服务器上


的该文件也删除,我们必须对已经删除的 add.txt 文件进行提交(Commit)操作

右键选择 add.txt,选择 Commit selection…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

确定。

这是操作后的界面,我们发现 add.txt 文件已经不存在了,下面再到服务器上


去看看

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

大家可能会感到奇怪,为什么服务器上的 add.txt.v 还存在呢?这是因为 cvs


并没有将服务器上的文件删除,只是这个时候你永远也无法从本地得到服务器上
的这个 add.txt 文件了,除非重新进行 Checkout 操作。

下面介绍另一个删除操作 Erase 命令

Erase 的功能是把你本地的文件删除掉,而远程仓库中的相应文件不受影响。
当您选择一个文件,进行了 Erase 操作之后,这个文件被打上了“Missing”的标记,
含义是这个文件在远程仓库有,而本地不存在。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们来对 child 目录下的 me.txt 文件进行 Erase 操作,如果快捷菜单中没有


Erase 命令,可以配置快捷菜单,方法如前所述。

选择 ok

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

命令执行成功后,me.txt 前面的图标显示为一个丢失的图标

该命令执行后对服务器没有任何影响,我们来看看本地文件

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现 me.txt 已经不存在了,这时我们到回收站看看

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现之前删除的两个文件都在这里。

既然这个被 Erase 的文件在仓库中有,我们就可以从仓库中把它取回一份到


本地。具体操作是:选定状态为 missing 的文件,按下鼠标右键,在弹出菜单中,
选择“Update selection…”子菜单

执行后的界面

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们看到 me.txt 文件又恢复了

注意:

您在使用 Remove 和 Erase 命令的时候,一定要弄清楚区别,以免造成


损失

上面我们讨论了如何删除一个文件,那么如何才能删除一个目录呢,比如在
这里我们要把 child 目录删除,应该如何做呢?事实上,直接操作的方法是没有
的,WinCvs 并没有给我们提供这个命令,解决的办法是将服务器上的 child 目录
删除,然后我们重新 Checkout 该 Module 就可以了。不过这种情况比较少见,所
以我就不准备详述了。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

下面介绍查看文件版本历史的方法

由于我们在实际工作中,可能会对代码文件进行多次修改,这样就会产生一
个文件的多个不同版本

我们这里要查看 test.txt 的版本历史,右键选择 Graph selection…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

点击确定

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现了 test.txt 文件的版本历史信息

当前版本是 1.2

如果想查看某个版本的信息,可以双击该版本,这样就会出现该版本对应的
文件内容信息。

以上所介绍的内容是我们在使用 WinCvs 时使用最多的命令,在程序设计中


有这样一种说法:20%的代码占据 80%的执行时间。同样,上面介绍的很少的命
令占据我们日常工作中的大部分时间,当然还有其他一些高级命令,需要大家在
实际工作中不断摸索,我相信,只要大家对 cvs 工作基本原理很清楚,其他的命
令应该很快就会掌握。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

7 文件比较工具

当采用 cvs 作为版本控制工具时,文件比较是不能避免的,一个好的文


件比较工具能大大提高我们的生产率,提高工作准确性,下面我就来介绍文
件比较的工具和方法。
我们回到 WinCvs 的界面

选择菜单 AdminPreferences…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

选择 WinCvs 选项卡

这里面有一个 External diff 选项,这就是让我们自己设定文件比较工具,


我向大家推荐 WinMerge 这个软件,它是一个很好用的文件比较工具,并且
是免费的,网上很多地方都有下,我在这里就是采用这个软件作为 WinCvs
的文件比较工具

确定,关闭窗口,回到 WinCvs 主界面

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

双击 test.txt,打开该文件

我们增加两行文字

保存,关闭文件。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时 WinCvs 中该文件已经变成了红色,说明我们已经对该文件进行了
修改

右键选择该文件,从快捷菜单中选择 Diff selection…命令

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时,WinCvs 会自动为我们打开 WinMerge 程序,并且显示我们本地文


件与服务器上该文件的对比,其中不同的地方有颜色标明,图上显示我们加
上的两行文字与服务器上的不同,已经加上了黄色的标志。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

如果有多个不同的地方,那么我们可以点击按钮向下移动,就是如图所
示的下一个按钮

这时不同的地方用红色的标明

我们可以选择快捷按钮中的复制到左侧,复制到右侧,或者所有到左侧,

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

所有到右侧来完成我们希望的操作,假设我们想用我们的本地文件覆盖掉服
务器上的文件,就选择复制到左侧按钮。

这时两个文件已经完全相同了,颜色变成了白色。
接下来保存,退出。

注意:
我们本地文件与之相比较的文件并不是真正的服务器上的文件,而
是服务器上的文件在本地的一个副本,因为文件比较时需要从服务器上下载
一个副本到本地参加比较,所以我们改变的只是这个副本,并不是服务器上
的文件,服务器上的文件并没有发生任何变化,如果我们再次选择 Diff
Selection…时仍会出现如下界面

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

回到 WinCvs 主界面

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

提交 test.txt 文件

再次对该文件进行 Diff 比较

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现该界面说明我们本地文件与服务器上的文件已经是一样的了。

WinMerge 是一个非常好用的文件比较工具,相比起 WinCvs 自带的文件比


较工具,可以大大提高我们的效率,节省时间。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

8 使用 Eclipse 协同 CVS 进行版本管理

Eclipse 是一个非常优秀的集成开发环境。IBM 已经花了多年的时间开发


基于 Java 的公开源代码软件 Eclipse,并在其中投资了 4000 万美元。这个在
IBM 支持下的开放源代码项目经过一个时期的发展完善,已经为广大 Java 开
发者所熟悉。Eclipse 的出现,为 Java 开发者提供了免费使用强大的 Java IDE
的机会,通过集成大量的插件,Eclipse 的功能可以不断扩展,以支持各种不
同的应用。本章介绍如何使用 CVS 协同 Eclipse 进行版本控制。
使用 Eclipse 进行版本管理首先需要我们做的仍然是配置 cvsnt 参数,以
及服务器仓库,这与我们之前所做的工作完全一样,不过它不需要我们配置
WinCvs 了,因为 Eclipse 本身已经集成了 CVS 客户端。下面我们开始 Eclipse
协同 cvs 进行版本控制之旅。

首先启动 Eclipse,我采用的版本是 3.0.1,将工作目录设定在 E:\MyProject


目录下

启动后的界面

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们将透视图切换到 CVS 资源库视图

选择菜单 WindowOpen PerspectiveCVS Repository Exploring

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

在该透视图中显示的是已有的与 cvs 服务器的连接,由于我们是第一次使


用,所以还没有任何连接.因此里面的内容是空的,下面我们建立一个与 cvs 服
务器的连接。在透视图里右键选择 NewRepository Location

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现上面的界面,该界面是与 cvs 服务器进行连接的一些参数配置,相信大


家对这个界面应该都很熟悉了,因为它与我们之前所用的 WinCvs 非常相似,我
们还利用之前的一些参数进行设置

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

上面是我填写的一些参数配置,点击 Finish

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现这个界面,说明我们已经与 CVS 服务器连接成功.

下面我们将创建一个新的项目,并将该项目 Import 到 CVS 服务器

我们在这里新建一个 Java 项目,项目名字叫 Test

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

Next

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

输入项目名称 Test,然后 Finish

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时,一个新的 Java 项目就建立好了,下面我们要做的就是将该项目


Import 到 CVS 服务器上,方法是右键选择项目名称TeamShare Project…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时出现已经存在的 Repository Location, 我们就用刚才建立的那个


Repository,然后 Next.

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

出现一个选择框,询问我们以什么名字来做为 Module 名,我们就用项目名


Test 来作为 Module 名,然后 Next

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

点击 Finish

出现该对话框,询问你是否将一些未 Commit 的资源提交,我们选择 Yes

同样选择 Yes

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

此处让我们输入一些注释,我就不输入了,ok

这时我们的 Test 项目就已经 Import 到 CVS 服务器上了,并且在项目名称


后面有一个服务器的地址[192.168.1.4],下面我们到服务器上去看看那里发生
了什么

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时我们发现在 CVS 服务器上多出了一个 Test 目录,这个目录就是刚才


我们 Import 的那个目录,进去看看里面有什么内容

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这样我们就将一个新建的项目 Import 到 CVS 服务器上了

下面就是 Checkout 的操作了,因为项目组的一个人先将项目 Import 到


CVS 服务器上,其他人需要从 CVS 服务器上将该项目 Checkout 到本地,然后进
行协同开发.Checkout 方法很多,我只介绍一种常用的.切换到 Cvs Repository
透视图

里面列出了在 CVS 服务器上存在的所有 Module,我们想要 Checkout 方才


建立的 Test 项目,右键 Test 选择 Check out,然后切换到包资源管理器视图

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现这里面已经出现了 Test 项目,这样我们就可以与 CVS 服务器进


行交互了

下面我将介绍在开发过程中 Eclipse 协同 CVS 开发的基本操作.


我们首先新建一个包:com.zhanglong.action

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

接着在该包下新建一个类:Sample

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

Finish

Sample 类内容如下:

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

然 后 我 们 将 这 个 类 提 交 到 CVS 服 务 器 上 . 方 法 是 右 键 该 类
TeamCommit

出现该窗口的原因是因为在 CVS 资源库中并不存在类 Sample 极其所在


的包 com.zhanglong.action,我们选择 Yes,这相当于将 WinCvs 的 Add 和 Commit
操作两者合二为一了.

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这里是填写注释,相当于 WinCvs 填写日志一样


点击 ok,这样我们就将类 Sample 以及它所在的包 Commit 到 CVS 服务
器上了,我们到服务器上看看那里是否多出了相应的文件.

我们发现果然在 Test 目录下多出了 com 文件夹,进入

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

我们发现了熟悉的 Sample.java.v 文件,用 EditPlus 打开

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这就是该文件的内容,可以看到服务器上已经有了该文件的内容,说明我
们的提交是成功的.

下面介绍 Update 操作,该操作与之前介绍的 WinCvs 下的 Update 操作基


本雷同,右键选择类 SampleTeamUpdate…

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这里我们直接选 Finish 就可以了,其他的不必理会

下面介绍文件比较方法,我们首先对类 Sample 进行一些更改

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

加入 private int age;这一行


然后右键选择类 SampleCompare WithLatest from head

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

这时已经出现了文件比较窗口,与之前介绍的 WinMerge 很类似,进行的


操作也很类似,这里就不再赘述了

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)


深入浅出系列之一_WinCVS 作者:风中叶(张龙)

9 后记

至此,这个 WinCVS 实用指南教程就结束了,写作过程中也参考了网上很


多资料.该教程不足和错误之处再所难免,还希望大家多提宝贵意见.写这个教
程的目的就是帮助大家尽快掌握 CVS 这个强大的版本管理软件,提高团队开
发效率,为开源世界贡献自己的一份绵薄之力。

北京圣思园教育科技有限公司版权所有 (All Rights Reserved)