CVS项目管理
一、将Eclipse项目提交到CVS
Eclipse与CVS服务器建立连接后,开发者就可以把本地的项目添加到资源库中去了。
操作前提:Eclipse中现有的项目Meeting_Hall仅完成了班级事务的发布功能。
Step 1: 在Eclipse的“包资源管理器”视图中选中项目,单击鼠标右键,选择“小组”→“共享项目”命令,在弹出的对话框中选择已经定义好的资源库位置,并使用项目名作为服务器上将要建立的模块名。
模块是资源库的一级目录,通过这一步的操作,就会在/CVSNT_House资源库中建立一个名为Meeting_Hall的模块,与Eclipse中的Meeting_Hall项目对应。
Step 2: 把Meeting_Hall项目提交到CVS服务器,并在服务器上创建Meeting_Hall模块,需要把相关资源复制到服务器上,即“落实”操作。
Step 3: 浏览资源库的物理位置,Meetng_Hall模块中存储了项目中的相关资源,同时“CVS资源库”视图也反映出了相应的变化。
二、导入CVS服务器上的项目
把Meeting_Hall项目共享到CVS之后,当有新的开发者加入项目开发团队时,就可以把这个项目从CVS服务器导入到自己的Eclipse中了。
操作前提:
为了更清楚地演示这个过程及结果,先把Eclipse中已经共享了的Meeting_Hall项目彻底删除。
Step 1: 导入项目的时候,选择“CVS中的项目”,并使用服务器上“现有的资源库位置”,导入需要的项目。
Step 2: 从CVS检出资源时,可以作为新建项目导出,也可以作为工作空间中的项目导出;同时,系统会使用Eclipse的默认工作空间来存储导出的项目。
Step 3: 观察结果——系统将CVS服务器Meeting_Hall模块里的项目检出到本地客户端,“包资源管理器”视图中的项目完全是共享状态,与CVS服务器相连接;同时工作空间也已经有了Meeting_Hall项目的副本。
三、文件的提交与更新
在团队开发时,客户端既要进行合作又要保持独立:
u 既要把修改过的文件重新提交到CVS服务器端,以便大家共享开发成果;
u 又要及时地获取服务器端的新文件,以便更新本地文件系统,进行更进一步的开发工作。
⒈文件提交
提交(Commit):将自己本地修改过的文件提交到对应模块中,即用本地的文件覆盖远程服务器上的文件。
操作前提:
为了提交修改过的新文件,将项目AffairsAdd.java文件中的提示信息加以修改,代码如下.
修改前的代码:
request.setAttribute("result","OK,添加记录成功!");
修改后的代码:
request.setAttribute("result","非常好,添加记录成功,请查看结果!");
提交过程分为两步:
Step1: 把文件加入到版本控制模块中。此时只是在版本控制中注册文件,还没有把文件复制到服务器的模块中。
由于是对AffairsAdd.java文件进行修改,在此之前它已经在版本控制中注册过了,所以这一步是不用进行的。此时修改过的文件连同包路径的名称、项目名称的前面都出现了一个“>”符号。
Step2: “落实”文件,既把文件复制到远程模块中,使得其他用户能够访问这个资源。
⒉文件更新
更新(Update):从CVS资源库的对应模块中下载文件,更新本地文件,即用远程服务器的文件覆盖本地文件。
当团队成员正在对检出的项目进行开发时,团队中的其他成员可能也正在对存储库中的项目副本进行修改,这时需要获得这种更新信息,使得自己检出的项目副本与存储库保持一致。
更新之后,本地的项目资源与服务器上的资源完全相同,包括文件最终的修改版本也完全一样。
四、冲突的产生与解决
在项目进行团队开发过程中,可能会出现这样的情况:多个成员同时修改同一个文件,提交的时候Eclipse就会提示一些异常情况—不能落实发生冲突的修改。
冲突的解决是文件更新操作的核心所在。
⒈ 冲突的产生
操作前提:为了有利于讲解冲突的产生,模拟两个CVS客户对资源的共享开发过程。
u 从CVS中导入项目Meeting_Hall,将项目名称命名为Meeting_Hall_other,这样有别于已经存在的项目Meeting_Hall。这两个项目取自服务器上的最新资源,而且完全相同,相当于两个开发者都对自己的项目进行了更新,目前尚没有在本地做任何修改操作。
u Meetin_Hall:用户A所有
Meeting_Hall_other:用户B所有
Step 1: 用户A修改AffairsAdd.java文件并落实到服务器上。由于他是第一个进行落实的客户端,所以服务器接受他的修改文件并更新了资源库中的文件。
Step 2: 用户B也修改了AffairsAdd.java文件,并且在用户A落实文件之后也进行了落实操作,但是系统提示错误。
⒉解决冲突
由于用户B不能“落实”自己的修改,只能以资源库文件为依据更新自己的文件了,这种情况属于可自动合并的冲突。
在“包资源管理器”视图中选择AffairsAdd.java文件,在快捷菜单中选择“小组”→“更新”命令。
由于这种冲突可以自动合并,所以更新没有问题,用户B的文件变更了版本。
从图中可以看出两点变化:
u 文件集合了用户A和用户B的修改;
u 文件前面有“>”符号,说明用户B的文件与服务器上的文件有差异。但它与服务器上的版本相同,说明此时可以进行“落实”操作。
一些实践者在开发中的经验:
u 项目合理设计合理分工,各人负责各自的功能模块,这样就不容易造成重复修改。
u 在修改代码文件之前先更新,修改完之后尽早落实。落实时写上注释,说明做了哪些修改。
u 在开始开发工作前,先更新CVS的最新版本到本机;每天结束工作之前把当天完成的代码落实到CVS服务器,特别要注意:所有落实的代码都应该是完整的可运行的代码,保证其他开发者更新资源之后不会出错。
u 项目团队的JDK、Eclipse等开发环境(包括安装目录、软件版本、环境配置等)要保持一致。