UML软件工程组织

 

 


windows环境CVS client使用入门
 
作者:wxg22526451的专栏 来源:CSDN
 

v0.1

本文纯粹为“入门”性质,具体深入的命令解释请参见CVS手册。

本文首先介绍关于CVS的基础知识,然后对于流行的几种工具单独给出流程实例。

目录
CVS client使用前必须明白的基本概念
CVS命令行
用MFC编写的windows平台CVS图形界面 --- WinCVS (未完成)
在windows Explorer里直接checkout ---- TortoiseCVS     简明流程实例 
基于Netbeans Java类库的漂亮GUI ---- SmartCVS(未完成)
Visual age for java IDE集成 插件 --- vaj2cvs(未完成)
jBuilder 内置CVS支持 (未完成)
完善的设计,领先的工作平台 --- Eclipse 及内置CVS支持 (未完成)
Visual Studio IDE集成插件 -- CVSIn (未完成)

CVS client使用前必须明白的基本概念

1,CVS

CVS (Cuncurrent Versions System)是基于TCP/IP协议的版本控制工具,也是Open source界最重要的开发工具之一。

它原来主要工作在UNIX平台下,现在在windows平台上也出现了很多GUI工具。

关于其由来,发展,请参阅www.cvshome.org 。

CVS和其他大部分版本控制软件一样,是Client/Server结构的。你必须在本地为CVS repository准备好一个目录,来和服务器同步源代码。

和在Windows 开发平台中拥有很大用户群的Visual Source Safe(VSS)相比,CVS主要由两个不同之处。

一是VSS依靠服务器上的一个共享目录提供服务,每一个client必须能够访问这个共享目录。这也就决定了source safe在TCP/IP环境下使用很困难。对于分布跨越数个城市甚至国家的工作小组来说,只有通过VPN才能够安全的访问source safe数据库。(SourceGear公司(www.sourcegear.com)发售名为SourceOffSite的商业软件包,US$239 per user,也可以为远程用户提供通过TCP/IP访问source safe数据的能力。) 而CVS依靠TCP/IP连接提供服务,所以它天生就是为了在internet上协同工作而设计的。虽然基本的pserver连接安全性不是很高,但是通过使用SSH,可以获得很高的安全性。

二是CVS反对对文件上锁的机制。VSS以及其他很多传统版本控制工具要求一个文件只能有一个使用者,它必须先checkout声明编辑文件的独享权力,直到checkin为止。但是对于地理上不限制使用者位置的CVS来说,等待一个用户checkin是一件痛苦的事情,而互相沟通比一个紧密工作的团体更困难。CVS采取多个用户可以同时对一个文件进行编辑,然后commit的方式解决这个问题。假设由于沟通不足出现冲突,使用者必须手工解决冲突之后再进行commit。在这种情况下,冲突的开发者必须努力进行足够的沟通以避免再次冲突。

CVS服务器可以被配置为把commit记录自动张贴到新闻组或者开发者的email信箱中去。注意这些辅助记录将有助于开发者之间的合作。

2, repository,module

CVS服务器上,一个源代码仓库被称为一个repository,一个server上通常可以运行多个repository,每个repository都是完全独立的,可以有不同的用户列表和访问规则。在一个repository之下,文件按照module组织,每一个module就相当于一个工程,大致上相当于Source safe里面的project。

VSS在你连接上服务器之后,会列出所有的project。但并不是所有的CVS server都会提供module的列表。事实上,哪些module被公开是由管理员控制的。如果你知道一个被隐藏的module的名字,你仍然可以正常的访问这个module。

3,CVSROOT

CVS依靠运行在服务器上的一个服务程序提供TCP/IP的连接。为了访问一个CVS数据库,你必须知道你所使用的协议,服务器的地址,服务器提供的Repository的名称以及你的用户名和密码。

有数种协议可供选择。Unix/Linux机器上的CVS通常使用pserver协议,这是一种不非常安全的协议,但是如果你有额外的安全要求,可以通过SSH进行增强。除此之外,NT机器还支持ntserver协议,它通过主机的NT用户表进行访问控制(但是这是在internet上不可用的方法)。kserver和gserver协议用的比较少,他们依据Kerboses提供额外的安全保护。

你有必要知道CVSROOT这个参数。CVSROOT是一个用":"开始及分隔各个部分的字符串,它包含了协议、用户名、服务器地址和repository名称。对于用户来说,CVSROOT就像URL一样,是访问一个server的途径。

一个典型的CVSROOT=:perser:cao@61.155.107.187:/cvs。这里,pserver是协议名称,cao是用户id,61.155.107.187是主机ip,/cvs是repository的名字。NT主机的repository一般会采取d:/CVSROOT之类的格式。

另一个例子是:pserver:anonymous@jivesoftware.com:/cvs,这是jivesoftware公司提供的开放源代码java技术论坛的CVSROOT。

在windows下使用命令行方式,这个参数可以通过一个环境变量使用。在windows 2000/XP系统中,你可以通过在'My computer'的properties中选择advanced,然后选择'Enviroment Variables'来输入这个环境变量。

4,checkout,update

为了得到module下面的源代码,你只需要使用checkout指令。和Visual source safe不一样,checkout只是取得文件,而非锁文件。

如果你已经有了本地文件,为了和server保持同步,你需要进行update操作。update会自动把server上的新内容取到本机来,如果你本地文件进行过了改动,它会帮您做合并工作。

checkout 和 update既可以针对一个特定的文件,也可以针对一个目录或者整个module。

5,  commit

如果你对本地代码做了任何修改,或者增加一个文件,删除一个文件,每当你需要把你的改变提交到server上的时候,你就需要做commit动作。假设两个人都在本地修改了同一个文件,那么他们就像在进行一个竞赛,如果你快,那么你赢了。后commit的人将被server拒绝,不得不合并你的修改再次提交。

commit既可以针对一个特定的文件,也可以针对一个目录或者整个module。

6,  revision

Revision是指每一个文件的版本信息。当你第一次增加一个文件到repository的时候,它会有一个初始revision是1.1,以后每次提交,就会增加到1.2,1.3...

在一个branch中的文件,有相对于这个branch的版本号。如果你对文件作了tag,那么你会看到revision变成1.1.1.1的形式。具体的含义我们在branch和tag的时候描述。

7,branch

Branch是一棵正常生长的代码树中的枝杈。开始的时候,任何一个module都有一个主枝被称为'HEAD'。

一个branch最终要么被合并到主干中去,要么被结束。branch通常用来debug,如果这个bug被fix了,修改bug的代码应该被合并到主枝上去。一个branch也可能经历多次与主枝的合并。

8,  tag

Tag用来进行标示必要的信息。当您进行一次公开发布之前,您有必要对主枝标示"release 1.0"。这样您以后就可以随时回到这个版本。

//to do: 请完善这里的描述

CVS命令行

在得到CVSROOT和你的口令之后,你就可以试着登陆了。

首先,由于其他所有的GUI工具都是基于CVS基本协议的,而且他们可能会提供CVS的命令行或者等价形式作为显示的一部分,所以你应该对命令行操作有所了解。如果你还没有一个cvs。exe的命令行程序,从www.cvsnt.org你可以得到一个cvsnt的下载连接,其中就包含了一个命令行的cvs.exe程序。我们先从它开始(为了作为一个client使用,你不需要安装cvsnt的server组件)。CVSNT的cvs.exe是专门为windows编写的,你需要把cvs.exe放在你的path里面。

1.进入命令行方式。

和VSS一样,你也需要在本地有一个工作目录对应于一个repository。假设这个目录是'd:\works\sandbox'。请切换到这个目录。

输入"cvs"。你会看到:

这些提示信息告诉您关于cvs的基本语法。cvs后面跟着的是全局参数,然后是命令,最后是命令的参数。

2.login

正确的login不会有任何输出,否则会告诉你错误原因。

cvs

3.下面我们看看这个CVS server中有哪些module。

4.假设现在我们工作的项目是projectX,下面我们需要得到它下面的全部文件。

现在让我们看一下我们得到了什么。

在d:/works/sandbox目录下,你可以看到有一个projectX目录。这就是你得到的所有文件。

这个目录下你会发现一个叫做 CVS的目录。危险!请不要删除这个目录,或者改名,或者改动其中的任何文件,除非你知道你在做什么。这个目录是CVS的控制目录。如果你用过source safe,你一定很熟悉。scc这个文件,CVS目录的作用就和这个控制文件一样,都是用来记录你访问服务器的参数。

这里我们需要解释一下cvs和VSS的名词差别。在VSS中,checkout意味着你将获得一个文件的修改权,而cvs中checkout的这个含义取消了,仅仅指取得文件的新版本。很多cvs server会有一个anonymous用户,他只有checkout权限,也就意味着它只读。

5.让我们试着加入一个文件:

在d:/works/sandbox/projectX下,新建一个文件newfile.txt,

然后,在这个目录下执行:

你需要commit它才能被sever接受。

一个notepad窗口弹出请您输入注释。

这是commit完成的结果。现在的版本号是1.1。

6.好了,现在假设您需要改一下这个文件的内容。

CVS可以帮助您比较现在您的版本和repository中的版本有什么不同。

好了,现在您可以提交您的新文件。

CVS会帮您保留您的各个版本。在commit之后,现在我们来看一看各个版本的history。

7.最后,为了完成这个试验,请把这个newfile文件删去。

我们现在认识了一些最基本的CVS入门级指令。

其实CVS是非常强大的,我们并没有用到一些更复杂的功能,请参阅cvs的手册来得到更为详尽的帮助。

在多人同时开发的时候,冲突有时候也是不能避免的。

// to do:加入处理 cvs update和处理merge的部分。

更多的资料请参阅Karl Fogel的《Open Source Development With CVS》一书。该书的中文译本《CVS开源软件开发技术》由机械工业出版社出版(ISBN 7-111-08891-3/TP.1885,人民币35.00)。按此连接到华储网上电脑书店订购http://www.huachu.com.cn/asp/book/brow.asp?lbbh=B99112091

用MFC编写的windows平台CVS图形界面 --- WinCVS(未完成)

好了,就像黑白电影总是会过渡到彩色电影一样(正巧,就像现在发生在移动电话市场的情况一样),cvs命令行之外,一些图形界面的程序被编写出来简化你的操作。由于CVS的协议是公开的,所以,只要你的编程语言支持socket通讯,你也可以写一个。这个世界上有好几个这样的尝试,WinCVS就是其中一个。它是在win32平台上用MFC开发的。从我自己的体会来看,这是一个有益的尝试,但是还远远称不上精美。和VSS和source off site,borland的tram source,以及PVCS的界面比较,这个windows界面还显得很粗糙,差强人意。

但是我们还是可以从它开始进行我们的工作。

下载请至www.cvsgui.org,那里有最新的版本。

打开开始菜单的之后,你看到的是这样一个界面:

界面由3个主要区域组成,坐上角是目录结构,右上角是文件夹详细内容,下方是CVS命令的log。你可以从下方的log中得知cvs运行的详细信息。

首先你要做的事情就是告诉winCVS你的CVSROOT。

这个对话框在winCVS1。2和1。3的各个版本中稍有不同,但是不妨碍你输入CVS服务器的详细信息。

下一步就是login。

好了,现在我们就可以去得到一份jive2的源代码了。

你可以看到,winCVS默认会加上压缩的参数,这样可以减少网络流量,加快速度。

同样,用winCVS进行文件修改也是挺方便的。

以上就是winCVS的简要操作指南。更进一步的复杂操作,请参阅其帮助。

评价:值得关注,但不推荐。

在windows Explorer里直接checkout ---- TortoiseCVS

TortoiseCVS已经是一个相当成熟的cvs界面了,它的工作方式也是非常有趣的。

TortoiseCVS是一个简洁有效的CVS界面。你完全可以用它替代winCVS做日常绝大多数的工作。他独特的运行方式非常迷人,在一些商用配置管理工具,比如Rational ClearCase中,你也可以看到这样的windows explorer扩展程序的工作方式。

缺点:

1,tortoiseCVS会一直不释放它所操作的一些CVS文件和文件夹的系统资源。你可能会在试图删除一个在CVS控制之下的目录时遇到麻烦。windows系统认为有另一个进程正在打开它(显然就是TortoiseCVS),我没有找到如何杀掉在后台执行的TortoiseCVS的方法。在这种情况,用TortoiseCVS去update一下另一个module有所帮助。或者请重起你的explorer。

2,如果你需要在两个不同的server或者repository上做checkout的工作,TortoiseCVS有一个bug。它会在你输入CVSROOT信息,checkout第二个module的时候仍然使用第一个repository的CVSROOT。但是再做一次同样的操作就会成功的达到你的目的。

评价:推荐。

按此进入关于使用TortoiseCVS的详细说明

基于Netbeans Java类库的漂亮GUI ---- SmartCVS

使用java编写的CVS GUI在过去一两年中得到了长足的发展。拜jdk1.3所托,现在java程序的执行速度也有很大提高。Netbeans是由sun赞助的一个开放IDE,它其中包含了了CVS的基础类库。一个商业性的GUI,SmartCVS,就是在netbeans的稳定的cvs核心之上编写的。 虽然SmartCVS的商业版本收费,但是其基础版本是完全免费的,而这个基础版本已经足够大多数应用所需。

SmartCVS你可以在www.regnis.de下载。

SmartCVS自从1.2beta版本开始引入smartCommit,不再区分add和checkin,统一使用commit进行操作。

利用SmartCVS,你也可以看到一个文件的历史,以及图形化表示的各个分支。

总结:SmartCVS正如他的名字所说的,是一个相当聪明,精致,漂亮的CVS 客户端。作为日常工作它是完全可以胜任的。如果和TortoiesCVS结合起来,可以给你相当理想的CVS工作平台。

同时,它也可以在所有jdk环境中运行,不仅仅局限于windows平台。

IDE集成

对程序员来说,真正在编码的时候,IDE才是每天接触最多的环境。如果能够在熟悉的IDE中使用CVS,当然实用性增强很多。Visual source safe 在Microsoft的开发工具产品VB,VC中集成得相当出色,也大大提高了使用使用Microsoft开发平台的工作效率。

下面我们就来看看一下在流行的java开发工具中如何使用CVS。

IBM Visual age for java IDE集成 插件 --- vajcvs (未完成)

Visual age for java支持一个开放的Tool API,CVSin就是这样的一个tool。

下载地址:

安装参见其内部readme文件。

Borland jBuilder 内置CVS支持

jBuilder很早就在3.0中内置CVS支持,而且当时cvs是jbuilder唯一一个正式支持的源代码管理工具。在最新的Builder 6中,当然对CVS也支持得很好。

完善的设计,领先的强大工作平台 --- Eclipse 及内置CVS支持

IBM新的开放式集成开发环境,将是IBM visual age 系列开发工具的下一个平台。它提供CVS作为基础集成的一部分。在Eclipse中访问CVS是一件相当轻松自如的事情,Eclipse按照自己的需要封装了CVS,你可以看到,和其他访问方式完全不同,Eclipse是到现在为止最强大的CVS工作平台。

Visual Studio IDE集成插件 -- CVSIn (未完成)

这是一个用于Visual Studio的CVS插件,您可以利用它不离开IDE集成环境进行checkout/commit的操作。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号