Sung in Blog

           一些技术文章 & 一些生活杂碎
CVS client使用前必须明白的基本概念
1,CVS

CVS (Cuncurrent Versions System)是基于TCP/IP协议的版本控制工具,也是Open source界最重要的开发工具之一。
它原来主要工作在UNIX平台下,现在在windows平台上也出现了很多GUI工具。
关于其由来,发展,请参阅http://www.redsaga.com/CVS_newbie_win32/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的命令行程序,从http://www.redsaga.com/CVS_newbie_win32/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界面还显得很粗糙,差强人意。
但是我们还是可以从它开始进行我们的工作。
下载请至http://www.redsaga.com/CVS_newbie_win32/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工作平台。
posted on 2005-10-28 08:48 Sung 阅读(623) 评论(0)  编辑  收藏 所属分类: software Development

只有注册用户登录后才能发表评论。


网站导航: