1、Kingdom Tech1CVS培训Kingdom Tech李丽丽2006-3-27Kingdom Tech2目标l 1.了解了解CVS的的基本基本概况概况l 2.CVS工作工作思路思路l 3.CVS的的日常使用日常使用Kingdom Tech3CVS 简 介 CVS是是Concurrent Versions System的缩写,是主流的的缩写,是主流的版本控制系统之一版本控制系统之一.CVS是提升研发水平、保证产品质量的根本是提升研发水平、保证产品质量的根本 .CVS早期运行于早期运行于UNIX系统系统,现在由现在由CVSHOME.ORG维维护护,现在常用版本为现在常用版本为WINCVS2.
2、0。Kingdom Tech4l 免费:开源免费:开源l 功能强大功能强大:主流工具之一:主流工具之一l 多平台支持:多平台支持:UNIX,WINl 使用简单:使用简单:C/S 结构,结构,WinCvsl 得到众多软件商的支持得到众多软件商的支持l 安全性好安全性好l 实现代码持续集成实现代码持续集成CVS 特 点Kingdom Tech5CvsCvs工作思路工作思路1、在一台服务器上建立一个仓库,仓库里存放不同项目、在一台服务器上建立一个仓库,仓库里存放不同项目的源程序。的源程序。2、本地安装、本地安装wincvs,通过通过wincvs对服务器进行操作。对服务器进行操作。3、建立工作目录。每
3、个用户在使用仓库之前,首先要把、建立工作目录。每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行。都是在本地进行。Kingdom Tech6客户客户端端安装和安装和配置配置1 1、安装包:、安装包:邮件服务器邮件服务器 http:/mail.http:/ 2 2、安装过程:、安装过程:首先运行首先运行wincvswincvs_setup.exe_setup.exe安装安装WinCvsWinCvs。在安装过程中,会提示在安装过程中,会提示安装安装cvsntcvsnt,安装即可。安装完毕,运行安装即可。安装
4、完毕,运行python-2.3.1.python-2.3.1.msimsi,直至安直至安装结束装结束3 3、登录、登录 设置环境变量设置环境变量CVSROOTCVSROOT:CVSROOT=:CVSROOT=:pserverpserver:lilllill192.168.40.231:/home/192.168.40.231:/home/cvsrootcvsroot/bsdbsd_proc_procKingdom Tech7术术 语语l Repository:源码源码仓库仓库,CVS存放存放的的项目项目源码源码历史档案历史档案l CVSROOT:该该环境变量指明环境变量指明CVS Reposi
5、tory存放存放的的目录目录l Module:模块模块,就是就是CVSROOT下的顶级下的顶级目录名目录名l Branch:分支分支,在在一套一套Repository里里可以存放多个代码分支可以存放多个代码分支的的历史历史l Release Tag:发行标记发行标记,对于对于每每一个版本一个版本,可以可以用用符号符号来做来做标记标记,打标签打标签l revision:版本版本,自动递增自动递增,一般情况一般情况下将下将revision看作看作是是CVS自自己内部己内部的的一个编号一个编号,而,而tag则则可以标志用户可以标志用户的的特定信息特定信息Kingdom Tech8以WINCVS为例讲
6、解常用功能l login:Wincvs登录登录 l import:上传上传模块模块l checkout:下载模块下载模块l update:得到最新版本得到最新版本l commit:提交修改内容提交修改内容l add:增加文件增加文件 l remove:移除移除文件文件l 找回找回已删除文件已删除文件l diff:比较比较两个两个文件文件l status:看看文件文件的的状态状态l log:查看文件相关信息查看文件相关信息l tag:作作标记标记,必须以字母开头l create brach:分支分支的的创建创建l 解决冲突解决冲突Kingdom Tech9分别讲述常用功能现场示范Kingdom
7、Tech10WINCVS WINCVS 登录登录 n在菜单上选择在菜单上选择Admin-LoginAdmin-Login,出现如下界面,出现如下界面:Kingdom Tech11全局选项的设置全局选项的设置 -GlobalsGlobals 此项的配置主要是要注意这几选项:此项的配置主要是要注意这几选项:nPrune(remove)empty directoriesPrune(remove)empty directories,自动删除空目录;,自动删除空目录;n对一般配置没有特殊要求的,把对一般配置没有特殊要求的,把Supply control when addingSupply control
8、 when adding选选项选中;项选中;Kingdom Tech12WINCVS 登录与退出与退出n选择选择Admin-loginAdmin-login,将出现如下对话框要求用户输,将出现如下对话框要求用户输入登录口令入登录口令n如果如果CVSCVS服务器与服务器与WinCVSWinCVS的配置都没出错的话,将的配置都没出错的话,将在在CVSCVS的状态栏中提示:的状态栏中提示:n*CVS exited normally with code 0 CVS exited normally with code 0*ncode 0code 0表示正确的登录;表示正确的登录;ncode 1code
9、1表示有错误,要根据错误的提示进行修改。表示有错误,要根据错误的提示进行修改。n完成操作后,选择菜单完成操作后,选择菜单”Admin”Admin”Logout”Logout”,退出退出。返回返回Kingdom Tech13检出(检出(checkoutcheckout)项目)项目返回返回Kingdom Tech14修改提交文件修改提交文件l 从服务端从服务端checkoutcheckout项目后,会在本地建立文件的拷贝,在客户端修项目后,会在本地建立文件的拷贝,在客户端修改后提交(改后提交(commitcommit)到服务端即可将最新的文件保存到服务端。如)到服务端即可将最新的文件保存到服务端。
10、如下图,修改后的文件显示为红色。此时的修改只修改了本地的文件,下图,修改后的文件显示为红色。此时的修改只修改了本地的文件,如果要提交到服务器端,点击选中被修改过的文件,从右键菜单中如果要提交到服务器端,点击选中被修改过的文件,从右键菜单中选择选择commit selectioncommit selection命令即可提交到服务断后,文件版本会自命令即可提交到服务断后,文件版本会自动加动加1 1。返回返回Kingdom Tech15更新文件更新文件将服务端文件更新到本地将服务端文件更新到本地l 在对本地的文件修改前,最好先从服务端更新文件,因在对本地的文件修改前,最好先从服务端更新文件,因为多人
11、操作同一个文件时,没有及时更新容易引起冲突。为多人操作同一个文件时,没有及时更新容易引起冲突。如甲乙检出的版本同为如甲乙检出的版本同为1.21.2,甲修改提交后的版本为,甲修改提交后的版本为1.31.3,乙此时没有更新,在本地乙此时没有更新,在本地1.21.2的基础上修改提交,此时就的基础上修改提交,此时就会产生会产生冲突冲突。l 更新文件,点击选中文件(可多选),从右键菜单中选更新文件,点击选中文件(可多选),从右键菜单中选择择update selectionupdate selection命令即可将服务端的最新文件更命令即可将服务端的最新文件更新到本地。新到本地。返回返回Kingdom T
12、ech16Kingdom Tech17添加文件添加文件 在本地添加文件后提交到服务端,先选中文件,然后点击在本地添加文件后提交到服务端,先选中文件,然后点击“添加添加按钮按钮”,添加文件后再再右键菜单中提交命令,添加文件后再再右键菜单中提交命令“commit commit selection”selection”即可。注意此时有两个按钮,一个添加一般的文件;即可。注意此时有两个按钮,一个添加一般的文件;一个添加二进制文件。如图片文件。一个添加二进制文件。如图片文件。返回返回Kingdom Tech18删除文件删除文件 l Erase:只是在本地删除,不影响服务器只是在本地删除,不影响服务器l
13、Remove:选择文件后,点击选择文件后,点击removeremove,将文件从本地删除,将文件从本地删除删除后,从右键菜单中删除后,从右键菜单中“commitecommite selection”selection”命令,才将服务端命令,才将服务端的文件删除。的文件删除。返回返回Kingdom Tech19找回被删除的文件找回被删除的文件vErase:右键update即可vRemove:v如果只是点击remove删除文件,则点击Add添加按钮即可将文件找回;或者ctrl+L直接输入命令:cvs add*v如果已经执行commit,文件从服务端删除,则需要执行:1、只能用ctrl+L直接输入命
14、令:cvs add*,这时会得到一个空文件。2、选中这个空文件,执行update操作,得到这个文件实体。3、再次选中这个文件,执行commit操作,得到这个文件的最新版本(在原来被删除版本的基础升级一个版本)。文件的历史版本仍然存在。返回返回Kingdom Tech20导入模块导入模块(文件夹文件夹)将本地文件夹添加到服务端将本地文件夹添加到服务端 v右键菜单中选择右键菜单中选择import moduleimport module,cvscvs检查文件后,弹出如下窗检查文件后,弹出如下窗口。输入模块及路径,设置其他口。输入模块及路径,设置其他tabtab的属性即可。的属性即可。v 右键菜单中选
15、择右键菜单中选择“import module”import module”,cvscvs检查文件后,弹出如检查文件后,弹出如下窗口。输入模块及路径,设置其他下窗口。输入模块及路径,设置其他tabtab的属性即可。的属性即可。v将本地文件导入到服务断后,本地并没有跟服务端建立联系,如将本地文件导入到服务断后,本地并没有跟服务端建立联系,如要建立联系,必须再将模块从服务端检出(要建立联系,必须再将模块从服务端检出(checkoutcheckout)才行。)才行。v如果文件夹里的文件比较少,可以直接采用添加的方式。先添加如果文件夹里的文件比较少,可以直接采用添加的方式。先添加文件夹,再添加下面的文件
16、,与添加文件方式一样。文件夹,再添加下面的文件,与添加文件方式一样。返回返回Kingdom Tech21Kingdom Tech22创建标签、分支创建标签、分支v在在cvscvs有几种概念容易混淆。有几种概念容易混淆。vversionversion:一般版本翻译成英文应该是这个词。在:一般版本翻译成英文应该是这个词。在cvscvs中,中,确用确用revisionrevision这个词来代替这种说法,大概他们觉得正式这个词来代替这种说法,大概他们觉得正式版才能叫版才能叫versionversion,而我们平时不断修改的版本只能叫,而我们平时不断修改的版本只能叫revisionrevision。自
17、动递增自动递增,CVS内部内部的的编号编号。vtagtag:顾名思义就是做个标签。:顾名思义就是做个标签。TagTag只是在文件上做了一个只是在文件上做了一个标签,并没有创建不同的文件,这一点跟标签,并没有创建不同的文件,这一点跟branchbranch不同。不同。tag是是标志用户特定信息标志用户特定信息的的返回返回Kingdom Tech23v BranchBranch:分支。当我们在原来的版本基础上需要创建另外一:分支。当我们在原来的版本基础上需要创建另外一个版本(项目)时,可创建一个分支。如我们的甲项目跟乙个版本(项目)时,可创建一个分支。如我们的甲项目跟乙项目基本上相同,可直接在甲的
18、基础上创建一个分支项目基本上相同,可直接在甲的基础上创建一个分支v_v_dsds。甲上有用的地方直接合并到乙分支上。甲上有用的地方直接合并到乙分支上。v 一般是有个发布版一般是有个发布版v1.0v1.0,在开发,在开发v1.2v1.2的基础上,同时又在修的基础上,同时又在修改改v1.0v1.0,这时就可以创建分支。,这时就可以创建分支。v 在在cvscvs中,中,updateupdate某个某个tagtag或或branchbranch或或revisionrevision是通过同一个是通过同一个界面选项,只需要根据名称来输入即可。界面选项,只需要根据名称来输入即可。返回返回Kingdom Tec
19、h24合并不同分支(合并不同分支(mergemerge)v在在updateupdate文件时,第三个文件时,第三个tabtab就是合并选项。也即合并文件是就是合并选项。也即合并文件是通过通过updateupdate来进行的。如下,说明了几种合并方式。来进行的。如下,说明了几种合并方式。v如上图设置,将如上图设置,将v_v_dsds版本覆盖另版本覆盖另v_v_xjxj 。返回返回Kingdom Tech25查看文件状态查看文件状态v在在”Query”Query”菜单下有菜单下有DiffDiff、LogLog、StatusStatus、GraphGraph等操作。等操作。vDiffDiff是将本地
20、拷贝与对应目录或文件任一版本进行比较;是将本地拷贝与对应目录或文件任一版本进行比较;vLogLog显示指定文件的所有修订版本日志信息、日期、标记与显示指定文件的所有修订版本日志信息、日期、标记与作者等;作者等;vStatusStatus显示指定文件的状态,如文件是本地以及库中的版显示指定文件的状态,如文件是本地以及库中的版本号等;本号等;vGraphGraph图形方式显示文件的修订版本。图形方式显示文件的修订版本。返回返回Kingdom Tech26关关 于于 冲冲 突突 CVS的的无限制无限制的的版本管理版本管理检出的检出的模式模式,就是就是检出检出一个文件并不一个文件并不给定开发者给定开发
21、者对对那个文件那个文件的排它权的排它权,其它其它的的开发者开发者也也可以可以对其检出,对其检出,进行他们进行他们自已的自已的修改修改,并且并且将其将其登记回去登记回去。你你可能可能会问会问:“后面后面的的登记不是登记不是会会覆盖前面覆盖前面的吗?的吗?”回答回答是是不会不会的。的。会会自动合并那些改变自动合并那些改变,但是但是,如果前后如果前后两人两人修改修改了了相同相同的的地地方方,可能引起冲突可能引起冲突,CVS把把冲突冲突段段保留保留,由由用户手工解决用户手工解决。Commit时报时报Update-to-date check failedUpdate-to-date check fail
22、ed,说明有冲突说明有冲突 尽量避免尽量避免的的办法就是办法就是:1、COMMIT前先前先UPDATE 2、修改别人修改别人的的文件文件前前最好最好先先通知对方通知对方返回返回Kingdom Tech27一些常用的规则l 1.前端统一前端统一用用WINCVS2.0l 2.权限统一管理权限统一管理,一般一般由由LEADER控制控制l 3.只有只有LEADER才才能能TAG、BRANCHl 4.COMMIT 前先前先 UPDATE,以以减少冲突减少冲突l 5.同同TEAM使用相同使用相同的的开发环境开发环境,包括文件包括文件PATHl 6.将将个个人人工作目录工作目录设设成成与与CVS项目项目目录一致目录一致,修改及时反映修改及时反映l 7.原则上代码共同拥有原则上代码共同拥有,但但修改别人修改别人的的文件文件前前最好最好先先通知对方通知对方l 8.COMMIT时时必需写必需写注释注释Kingdom Tech28Q&A?