版本控制相关资源( Pragmatic Version Control Sources ) [和讯博客]

来源:百度文库 编辑:神马文学网 时间:2024/04/29 13:08:08
版本控制相关资源( Pragmatic Version Control Sources )
[转贴 2005-12-09 10:20:10 ] 发表者: 思想地 
版本控制相关资源( Pragmatic Version Control Sources )
1、cvs相关
CVS使用手册 http://www.chedong.com/tech/cvs_card.html CVS 下载http://www.march-hare.com/cvspro/ 安装和使用CVS http://www.verydown.com/infoview/Article_1531.html CVS小型开发团队组建快速入门 http://www.javadown.com/SoftDown.asp?ID=4075 wincvs 下载 http://prdownloads.sourceforge.net/cvsgui/WinCvs2_0_2-4.zip?use_mirror=jaist
在Eclipse 2.0中使用版本控制系统CVS
董向辉 (xianghui.dong@mail.ia.ac.cn)
2002 年 7 月
2002年6月28日,Eclipse 2.0正式版已经正式完成,这将是Java开发工具历史上的一个重要事件,Eclipse开始步入成熟阶段。本文借此机会介绍在Eclipse中使用版本控制系统CVS的一些经验和技巧。首先介绍为什么Eclipse要使用CVS来作为自己的版本控制系统而放弃了有着很好口碑的Visual Age Java的ENVY,然后简要讲述CVS系统的背景及NT平台下CVS服务器的安装和设置。接下来,针对Eclipse,详细讲解了使用CVS进行团队开发时的开发流程以及在Eclipse中具体使用的重要操作方法。
在Visual Age Java之后,IBM推出了新一代的开放源码软件开发平台Eclipse,在此基础上打造其核心产品WebSphere家族。而对于大部分个人开发者而言,Eclipse作为一个崭新的Java集成开发环境提供了一个非常具有吸引力的选择,已经得到了越来越多开发者的关注和喜爱。
项目的版本控制对于团队开发是极端重要的,对于个人开发者也是项目复杂化时不可缺少的工具。
在Visual Age Java中,由于Visual Age Java特有的项目数据存储方式――所有的相关文件都存在一个二进制文件中,可以做到直接内置的版本控制,这一系统也就是著名的ENVY,它在Visual Age Java的使用者中有着非常好的口碑。
而在Eclipse中,情况有了变化。ENVY把项目数据存储在二进制文件中,也即所谓基于Repository的存储,而几乎所有其他集成开发环境的项目数据存储方式都是基于文件的,项目的所有相关文件直接作为物理文件存储在硬盘上。两种方式各有利弊,有许多刚接触Visual Age Java的用户很不习惯ENVY,认为看不见文件使得自己失去了直接感,反过来也有Visual Age Java的忠实用户极力支持和赞扬ENVY。(不过作者认为,在Visual Age Java中开发者至少可以几乎完全不用花心思在文件路径问题上,这个问题一般总是会耗费新手甚至老手的大量时间和精力。)在Eclipse中最终使用了基于文件的存储方式,这样增强了透明性和互操作性,但是要达到Visual Age Java以前做到的项目管理和源代码控制就必须采用不同的方式。
Eclipse本身内置了一定程度的版本支持,也就是所谓的Local History。在Eclipse中编辑的文件每次存盘都会留下记录,可以随时与历史记录比较,恢复到某一个时刻的状态。在资源视图(Resource Perspective)或者Java视图(Java Perspective)中的文件上点右键,选择Compare With,Local History,就会得到如下的画面,可以很清晰看到各个版本的区别。

图1:Eclipse中的内置版本支持:Local History。
如果需要,则可以通过Replace With,Local History来恢复到任一个以前的版本。当然,这样版本的历史是有限制的,可以在Eclipse的Preference中设置。在Preference―>Workbench->Local History中,可以设置保持最多保持几天的文件,每一文件的版本数目,历史文件的大小限制。
但是,这样的版本系统只实现了最基本的版本功能,如果想把文件某一个状态标记为一个版本,加上注释(仅仅从Local History中的保存时间很难看出每一个版本的特点,也难以找到重要的关键版本),或者想把某个目录乃至整个项目版本化,Eclipse内置的Local History都是无能为力的。
好在Eclipse基于开放的思想,采用了业界标准的版本控制系统CVS,这样不仅很好地实现了版本控制的功能,对于已经熟悉CVS的开发者来说也更容易使用,更重要的是,可以为团队开发提供更加灵活和开放的选择:项目的数据可以存储在一个CVS服务器内,不同的开发者甚至可以采用不同的开发工具,只要这些工具都支持CVS。也许这时我们可以理解为什么Eclipse放弃了Visual Age Java的业已很成功的ENVY系统,这一点很好地体现了Eclipse的开放性和对其他软件的良好互操作性。
CVS是Concurrent Versions System(并发版本系统)的缩写,基于Unix体系中成熟的SCCS(Source Code Control System)和RCS(Revision Control System)开发,是一个开放源码的项目,目前已是版本控制系统的主流软件。一个很常见的使用CVS的场合,就是开放源码项目。由于开放源码项目的开发者的分布性,对于版本管理的要求更加严格,而目前大部分的开放源码项目几乎都是采用CVS来管理源代码,CVS的标准性和强大可见一斑。
CVS采用客户机/服务器体系,代码以及各种版本存储在中心服务器内,每一个个体开发者开发时都首先从服务器上获得一份自己的拷贝,在此基础上进行开发,以避免直接影响服务器上的数据。开发者可以随时把自己的新代码提交给服务器,并通过更新获得代码的最新状态,保持与其他开发者的一致。
CVS对于网络是透明的,开发者可以使用客户端软件(几乎所有的平台上都有相应的客户端软件)在任何时候,任何地点通过网络来获取最新的代码。
对于Eclipse的开发者而言,Eclipse本身内置了CVS支持,不需要使用其他客户端软件,只要建立一个CVS服务器,就可以使用这一强大的版本控制系统了。
CVS起源于Unix/Linux平台,关于Unix/Linux平台下的安装使用的介绍文章很多,这里就不再重复,读者如果需要在Unix/Linux平台下建立CVS服务器,可以参考本文附录的相关资源。
在Windows平台上也有CVS的一个实现――CVSNT,CVSNT的安装有一定困难,这里我们做一个简单介绍。 CVSNT的安装
首先到CVSNT的主页http://www.cvsnt.org下载最新版本,目前是CVSNT 1.11.1.3 (Build 57f)。
CVSNT的安装有一些注意事项,请读者尽量按照下面所说的步骤来进行安装,描述主要针对Windows 2000。如果读者在安装过程中还有问题,可以参考本文附录的资源中关于CVSNT的安装技巧的文章或邮件列表。
CVSNT可以安装在Windows NT4 服务器或工作站SP6, Windows 2000服务器或专业版,Windows XP专业版上。 以管理员账号登陆,首先修改环境变量。直接执行安装程序,很有可能在最后会出现无法创建路径变量的错误,为此我们首先修改环境变量,设定路径。假设我们要把CVSNT安装到D:appcvsnt目录下(与CVSNT相关的内容最好安装到NTFS分区上,也尽量不要使用含有空格的目录名或者文件名,虽然CVSNT已经尽量支持包含空格的目录名和文件名,但仍有可能出现问题),那么打开控制面板,系统属性,高级,环境变量,系统变量中的Path,添加上D:appcvsnt并保存设置。 接下来可以执行安装程序,修改安装目录,一步步完成安装。 从开始菜单的程序组中启动CVSNT配置程序Configure Server。这时应该看到服务器还没有运行(CVSNT作为系统服务运行),如果已经运行了,先把它停下来。 选择第二个选项卡Repositories,首先勾上Repositories prefix(数据库路径前缀)的选项。CVSNT中只有一个数据库路径前缀,在这同一个前缀下,可以有多个数据库。相应的,所有的数据库都位于数据库路径前缀对应的目录之下。这里我们假设数据库都存储在E:workcvsrepo下,点击省略号按钮来选择E:workcvsrepo作为数据库路径前缀。 点击下面的Add按钮添加数据库根,可以有多个。比如我们将/work作为我们的工作项目的存储根。注意添加时系统自动把已设定的E:workcvsrepo作为了路径前缀。 选择第三个选项卡Advanced,勾上全部选项,包括Use local users instead of domain。设置临时目录,假设为E:workcvstemp。注意要保证临时目录的安全设置(右键点击目录属性,共享,权限)给所有帐号以完全控制权限,包括SYSTEM帐号。并且,绝对不能把临时目录设在诸如C:WINNTTEMP或者C:Documents and Settings下的任何地方,因为这些地方对于用户的访问是有限制的。 点击应用以保存设置,这一点相当重要。 现在可以回到第一个选项卡,点击Start按钮,服务应该正常启动运行了。如果有问题,可以打开一个命令行窗口,输入path命令来检查路径是否已经设置正确,也许需要重新启动来使设置生效。 打开一个命令行窗口,输入如下命令,用你的实际计算机名和用户名替代尖括号内的内容,注意对于NT Server,不能用localhost作为计算机名,必须使用实际计算机名:
set cvsroot=:ntserver:<计算机名>:/work
这一命令通过设定cvsroot这一环境变量,设定/work为目前的cvs数据库根。这里使用ntserver模式,这一模式比较适合服务器就在本地的情形。它要求局域网或者域内所有机器的用户帐号相同,客户端使用Windows NT,Windows 2000或者Windows XP。pserver模式是缺省的,除非关掉2401端口,下面我们的Eclipse就是使用pserver模式。
cvs passwd -a <你的NT用户名>
这一命令设定CVS中的用户名和密码,输入后将提示你输入密码。
注意如果需要CVS 服务器同时以ntserver和pserver模式运行,那么密码最好不要和系统中用户的真实密码相同以保证安全。
这里的用户必须是服务器上的真实用户,不过可以给真实用户设定一个不同的使用名alias。使用命令:
cvs passwd -a -r <你的NT用户名>
必须注意,这些名字里最好不要使用任何空格。如果必须的话,可以用双引号括起来。 到此为止,CVS服务器已经初步设置完成,可以使用了。缺省情况下,服务器将作为NT服务自动运行。读者既可以使用命令行的CVS命令,也可以使用各种CVS客户端来连接CVS服务器,执行CVS操作。不过,下面我们主要介绍在Eclipse中通过内置的CVS支持来使用CVS系统。
前面已经提到,CVS的数据存放在服务器的数据库中。为了支持Concurrent这一并发特点,CVS使用了一个分枝(Branch)模型,以保证不同开发者的相对独立,但是又高度集成。分枝可以看成一个开发团队共享的工作区(Workspace),在CVS数据库中,有一个特殊的分枝称为HEAD,代表主要工作流。
开发者可以提交(Commit)自己的工作,并通过更新(Update)与其他人的最新修改保持同步。提交是把自己的修改提交给数据库,称为输出(Outgoing),更新则是得到其他人的修改,称为输入(Incoming)。每次提交之前,都应该先更新,以保持与最新状态同步。
因此,在Eclipse中使用CVS进行团队开发,理想的开发流程应该是这样的(具体操作方法随后介绍):

图2:团队开发流程
从最新状态开始。开始工作前,要保证所有资源与最新的分枝状态一致。对于从头开始的新项目,首先要连接服务器,设定存储那些资源文件。对于在服务器数据库中已经有记录的项目,首先要通过更新来保证资源状态最新。如果本地的工作没有需要特别保存的,可以直接把数据库中的最新版本Check Out As Project,或者Replace With,Latest from Repository。 进行本地工作,保存修改。 同步。当做好提交工作的准备后,要和服务器数据库同步。 首先应该更新(Update),检查所有的Incoming改变,输入到本地,看是否会影响自己的工作,是否会造成冲突,破坏完整性等等。 检查完更新后,可以确认自己的工作和最新的Branch内容是一致的,就可以提交(Commit)自己的修改了,标上适当的注释。
下面介绍这一开发流程所用到的主要操作。
对于一个新的项目而言,首先需要做的就是设置Eclipse来连接CVS服务器。首次连接将与服务器同步(Synchronize)。
首先在Eclipse的资源视图(Resource Perspective)或者Java视图(Java Perspective)中的项目上点右键,选择Team,Share Project,将出现提示窗口,选择是使用已知的CVS数据库位置还是新建数据库位置。对于第一次连接CVS服务器的情况,将需要首先定义连接所需的服务器参数和路径,用户名,密码等等。这些参数将得到保存,以后如果需要重新连接,就可以直接使用已知的CVS数据库设置。
这里我们选择新建一个数据库位置,进入下一个输入画面。
这里的主机名(Host)可以输入localhost(在Windows NT 4下不可以这样输入),因为我们的CVS服务器就在本机上。
接下来输入/work,设定我们的项目数据存放在这一数据库根路径下。
然后输入用户名和密码。
连接类型选择pserver,端口是缺省的不用改动。当然,如果你修改过CVS服务器使用的端口,这里就要保持一致。

图3:在Eclipse中设置使用CVS系统
接下来可以直接点击Finish完成设置。如果点击下一步,可以继续定义在CVS中是否使用与项目名不同的名字作为模块名,缺省是使用相同的名字。
现在我们完成了项目与CVS服务器的连接,项目已经和CVS服务器同步了。
但是这并不意味着CVS已经开始记录版本信息。因为在一个项目中可能有相当一部分资源文件不适合存储到数据库中记录版本信息,比如编辑器生成的临时文件,编译生成的.class文件,或者某些编译过程生成的二进制文件等等。因此,Eclipse并不自动把所有文件存储到数据库中,需要开发者手工指定把那些文件存储到数据库中,也就是加入版本控制add to version control。对于单个文件的指定,可以随时在资源视图(Resource Perspective)或者Java视图(Java Perspective)中的文件上使用右键,选择Team,Add to Version Control。如果需要存储整个项目或者同时指定多个文件,则要使用同步(Synchronize)视图。
注意项目与CVS服务器连接完成并同步后,在Eclipse右下角的Tasks和Console的位置新出现了一个Synchronize窗口,下方状态栏也显示了这次同步的状态信息。双击Synchronize窗口的标题栏使之最大化,我们可以看到窗口上半部分列出了所有尚未指定加入数据库的资源和文件。在这里我们可以同时选择多个文件,甚至选择整个项目,使用右键,选择Team,Add to Version Control,就可以把多个文件或者整个项目加入到数据库中,开始记录其版本信息。
我们可以看到,这时的同步视图上标明了处于Outgoing模式。同步(Synchronize)视图有Incoming模式和Outgoing模式,对应于提交(Commit)和更新(Update)操作,表示目前修改是来自本地还是来自服务器。当然,视图也可以同时显示Incoming和Outgoing方向的变化。当有变化时,在下半部分的比较窗口可以显示不同版本之间的差异和变化。进一步地,可以通过工具条上的合并(Merge)操作来消除对同一文件不同修改所带来的冲突。
在此之后,当完成对文件或者项目的修改,需要确认修改,把最新的状态存储到数据库中去,就需要执行提交(commit)操作。类似的,我们可以在资源视图(Resource Perspective)或者Java视图(Java Perspective)中的文件上使用右键,选择Team,Commit;或者在同步(Synchronize)视图中同时提交多个文件乃至整个项目。注意,每次提交时都会提示输入注释,这是很重要的,作为每一个状态的说明和提示。
当我们需要把文件或者项目的不同版本进行比较或者替换时,可以在资源视图(Resource Perspective)或者Java视图(Java Perspective)中的文件上使用右键,选择Team,Compare With或者Team,Replace With来完成。进行比较时将打开一个比较编辑器,很好地表示不同版本之间的差异,和Local History类似。
如果要了解CVS数据库的内容情况,可以使用CVS数据库浏览视图(CVS Repository Exploring Perspective)。我们可以点击Eclipse左上角的开启视图(Open Perspective)按钮,增加这一视图到左边的视图浏览栏里。前面已经提到,HEAD代表CVS数据库里的主流内容。展开Versions,可以看到以往的版本。另外,在右下角有数据库的历史记录标明每次修改的相关信息。
如果需要导出某一版本,就要用到Check Out操作。在某一版本上右键选择Check Out As Project,这将把这一版本导出为同名的项目,从而可以覆盖已有的状态,或者选择Check Out对话框来导出为其他项目。

图4:CVS数据库浏览视图
关于更详细的CVS使用方法和技巧,可以参考Eclipse的帮助中相关内容。
董向辉,1998年毕业于清华大学,随后进入中科院自动化所人工智能实验室直接攻博。科研兴趣主要在演化计算和系统复杂性问题,技术方面,从接触Java开始,便一直保持着对Java的兴趣并作为主要编程语言。同时注意关心新出现的有前景的相关技术,聚焦点先后包括软件工程,XML,J2ME等等。电子邮件地址:xianghui.dong@mail.ia.ac.cn。
关于CVS:
http://www.cvshome.org,CVS官方网站,可以从这里下载最新版本的CVS(Unix/Linux平台版本)以及相关的文档和资料,例如Per Cederqvist的Version Management with CVS 这本官方手册。
http://laser.zhengmai.com.cn/cvstutorials.html,一个中文的CVS简单教程。
http://www.cvsnt.org,CVSNT,在Windows NT上的CVS服务器,在此基础上也有返回Unix/Linux平台的版本。目前最新版本是CVSNT 1.11.1.3 (Build 57f)。
http://www.cvsnt.org/mailman/listinfo/cvsnt,关于CVSNT的使用问题的邮件列表。
http://w1.858.telia.com/~u85831169/InstallCVSNT.html,关于CVSNT安装的一些技巧和知识,感谢作者慷慨的准许,本文参考了其中部分内容。
http://devguy.com/cvsnt,另一个CVSNT安装问题的帮助和常见问题回答。
http://www.cvsgui.org,Windows平台下的图形化CVS客户端软件。
关于Eclipse:
http://www.eclipse.org,Eclipse官方网站,可以从这里下载最新版本2.0。
http://www-900.ibm.com/developerWorks/cn/java/l-ide/part2/index.shtml,VAJ之后是什么?,介绍从Visual Age Java到Eclipse,WSWB等等的来龙去脉以及各自的特点。
http://dev.eclipse.org/viewcvs/index.cgi/~checkout~/platform-vcm-home/docs/online/cvs_features2.0/cvs-faq.html,在Eclipse中使用CVS的常见问题回答。更详细的具体操作介绍,可以参考Eclipse软件所附带的帮助。
http://www-900.ibm.com/developerWorks/cn/java/l-cvs/index.shtml
安装和使用CVS
日期:2005年6月22日 作者:非常下载 人气:
简介
CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本管理.如果大家曾经参与过多人协作开发的项目,大家肯定有这样的痛苦经历:由于多个人同时修改同一个文件, 自己辛辛苦苦修改的程序被别人彻底删除了.另外,如果你的软件/程序已经发布了三个版本, 而这时候用户需要你修改第二个版本的东西,也许你会因为只保留了最新版本而痛哭流涕。还有就是你对程序做了一些修改,但是修改很少,你只想给远方的同事发一个两个版本之间的差别文件,这样可以免于邮箱不够大,网速太慢之类的问题.为了解决类似这样的问题,以及诸如生成补丁文件,历史版本修改等,一帮黑客(褒义)在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,开发了 CVS。(SCCS:Source Code Control System,RCS:Revision Control System)。
CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序.这样,就好象只有一个人在修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库管理员统一 修改.这样就可以做到跟踪文件变化,冲突控制等等.
由于 CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部分。不过大多数CVS 软件都把它们合二为一了。我们这里就分别从服务器和客户端的角度讨论cvs的使用。
Cvs服务器安装
首先确保系统安装有cvs:
[root@mail xinetd.d]# rpm -qa|grep cvs
cvs-1.11.1p1-3
如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包。
一 创建CVS属主用户:
# useradd -d /cvsroot cvs
# chmod 771 /cv sroot
二、建立CVS仓库(初始化cvs)
# su cvs
$ cvs -d /cvsroot init
$exit
#
四、启动cvs服务器
在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:
# default: on
# description: The cvs server sessions;
service cvspserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。
修改该文件权限:
# chmod 644 cvspserver
然后重新启动xinetd:
# /etc/rc.d/init.d/xined restart
然后察看cvs服务器是否已经运行:
[root@mail xinetd.d]# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 7866/xinetd
则说明cvs服务器已经运行。
五、创建用来访问cvs的用户
前面创建的cvs用户是cvs仓库管理用户,而为了让用户访问则还需要一个访问用户:
# useradd cvspub
# usemod -G cvs cvspub
这里添加了一个用户cvspub,并且将该用户添加到cvs组中。
六、管理cvs服务器
管理 cvs 服务器.服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?不难,cvs初始化结束以后,在管理员用户(这里是cvs用户)的主目录里有一个 CVSROOT 目录,这个目录里有三个配置文件:passwd, readers, writers。我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
{cvs 用户名}:[加密的口令]:[等效系统用户名]
如果你希望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你需要以cvs管理员身份(su cvs)用户手工创建,当然要按照上面格式;
第二个字段是该用户的加密口令,就是用 crypt (3) 加密的,你可以自己写一个程序来做加密,也可以用两个偷懒的方法:先创建一个系统用户,名字和 cvs 用户一样,口令就是准备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后 再把这个用户删除.这个方法对付数量少的用户比较方便,人一多就不合适了,而且还有冲突条件(race condition)的安全隐患,还要 root 权限,实在不怎么样,不过权益之计而已;另外一个方法就是利用apche的htpasswd命令创建passwd用户,添加用户只需要htpasswd passwd username即可添加用户到passwd文件中,不过需要在文件中对应行的最后添加一个":"冒号和对应的等效系统用户名;最好的就是自己编写一个程序了来生成这个passwd文件了。
第三个字段就是等效系统用户名,实际上就是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了。
readers:有 cvs 读权限的用户列表文件,就是一个一维列表。在这个文件中的用户对 cvs
只有读权限。
writers:有 cvs 写权限的用户的列表文件,和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧.假设我们有下面几个用户需要使用 cvs:
cvsuser1, cvsuser2, henry, betty, anonymous
其中 laser 和 gumpwu 是系统用户,而henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。
然后编辑 cvs 管理员家目录里 CVSROOT/passwd 文件,加入下面几行:
laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub
注意:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成。
编辑 readers 文件,加入下面几行:
anonymous
betty
编辑 writer 文件,加入下面几行:
laser
gumpwu
henry
这样就 ok 了,你再用几个用户分别登陆测试,就会发现一切都 ok 了。这里面的原理和说明我想就不多说了,其实很简单,和系统管理用户的概念是一样的。
七、建立新的CVS项目
一般我们都已经有一个或多个项目了,这样我们可以用下面步骤生成一个新的CVS项目。
将一个工程文件置于CVs中进行版本控制,在CVS 术语中称作导入(import)。从名字上就可以看出,在导入前需要为此作些准备工作。
输入操作的基本要求是有个"干净"的目录结构。"干净"的意思是不需要版本控制的文件都被移走了(如编译生成的文件,备份文件等等)。如果工程已经开始一段时间了,这就显得很重要。在目录中也许有些是不打算将其置于版本控制下的文件,但是又想将他们放在这里,这种情况下,你要在输入之前将它们移走,然后再移回来。
注意的是CVS 认为空目录是不存在的。如果想增加一个既不包含文件又不包含子目录的目录,需要在其下创建一个哑文件。建议你创建一个名为 README.txt 的文件,其内容为对目录的简要说明。
进入到已有项目的目录,比如叫 cvstest:
$cd cvstest
运行命令将项目文件导入到cvs仓库中:
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
说明:import 是cvs的命令之一,表示向cvs仓库输入项目文件.
-m参数后面的字串是描述文本,对项目进行描述,如果不加 -m 参数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量EDITOR来改成你喜欢用的编辑器)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字命名的仓库里)
v_0_0_1是这个分支的总标记.没啥用(或曰不常用)
start 是每次 import 标识文件的输入层次的标记,没啥用。
这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目的文件删除,试验如何从仓库获取文件这会在后面的客户端文章进行说明。
在Win2k上安装和使用CVS
1.准备有关软件:
从 www.cvsnt.org 下载服务器 cvs-1.10.8NT.exe.zip
从 www.wincvs.org 下载客户端 WinCvs11b16.zip
用winzip把cvs-1.10.8NT.exe.zip解压到d:cvs。
解压并安装wincvs.
2.把路径 d:cvs 加到path环境变量中。
具体方法:点选"我的电脑",单击右键,选属性,点环境变量按钮。
3.建立CVS存储目录。
打开一个dos窗口,键入"cvs -d :local:d:cvsroot init",然后你会发现d:cvs下面多了一个root子目录。
4.注册CVS服务
在dos窗口中,键入"ntservice -i d:cvsroot",屏幕显示"CVS NT Service Installed successfully",打开控制面板中的服务,你会发现多了一个"CVS NT Service"服务
用"net start cvs"启动cvs服务。 用"net stop cvs"关闭cvs服务。
5.设置密码
新建一个空白的passwd文件,放到d:cvsrootcvsroot目录下。用pwgen.exe生成密码。把用户名和密码写到passwd文件,例如:test:OuIgxgsUZH48g
6.使用wincvs
选Admin->Perferences,设CVSROOT为":pserver:test@server:d:cvsroot",server为作为服务器的计算机的名称。test为用户名。
7.登陆
选Admin->login,输入密码登陆。
8.导入模块
假设要管理的代码已经存在于c:source目录,选弹出菜单上的import module,选择目录c:source,输入模块名"test",wincvs就会把该目录导入到模块test中。
9.导出模块
选Create->checkout module,输入模块名和相应的目录就可以了。
10。修改文件
选中要修改的文件,点修改钮(笔图标)。然后修改文件,最后选弹出菜单上的commit selection,修改就被提交了。
CVS NT服务器安装指南
下载地址:http://www.cvsnt.org
运行 cvsnt_1.11.1.2.exe
点两次“Next”跳过“Welcome”界面开始安装
点“Yes”接受License
点“Next”用默认的Typical安装
选“Yes”并点“Finish”,重新启动
到桌面,在“我的电脑”按右键,点“属性”
点“高级”,点“环境变量”
选择“系统变量”中的Path,点“编辑”
在变量值后加“;C:Program FilesCVS for NT”(引号不要加入)
点“确定”
再“确定”
进入控制面板,双击“CVS for NT”
点“Install”安装CVSNT服务
Install按钮会变无效,Uninstall变有效
点“Add”,输入“d:cvsroot”,点“OK”
会提问是否创建目录,回答“是”
点“Start”启动CVSNT服务
在d:cvsrootCVSROOT目录下创建一个文件名为passwd的文件(没有扩展名)
(怎么创建没有扩展名的文件:
点资源管理器菜单“工具”->“文件夹选项”
点“文件类型”
找到并选中“TXT 文本文档”,点“高级”
选中“始终显示扩展名”,点“确定”,然后“关闭”)
在d:cvsrootCVSRTOO下新建文本文件
编辑该文件,把下面三行
user1:user1encryptedpassword (加密密码是用CVSNT带的工具“Generate Passwords”生成的,安装后菜单里有)
user2:user2encryptedpassword
user3:user3encryptedpassword
加入,保存退出,然后把该文件改名为passwd(把扩展名去掉)
加3个windows用户
user1密码同上面设的
user2密码同上面设的
user3密码同上面设的
安装wincvs(下载地址:http://www.cvsgui.org)后运行wincvs
点“Admin”->Preferences
CVSROOT 改为 user1@myservername:d:cvsroot
Authentication 选择 "passwd" file on the cvs server
Use vesion 选择 cvs 1.10 (Standard)
然后“Admin”->“Login”,成功的返回码为0
然后可以Import一个module
然后可以checkout这个module,如果checkout到同一个目录,要把原来的目录改名或删除
点Create->Checkout module
module name 填 mymodulename
Local folder如 d:user1
在Globals页里面把 Checkout read-only 不选中
其它的不管,点“确定”即可
checkout之前如果没有login,必须先login一次,除非工作目录,否则不需要重新login