资源描述
CVS使用手册
深圳市金证科技股份有限公司 版权所有
版 权 声 明
本手册版权为深圳市金证科技股份有限公司公司所有,未经本公司书面许可,任何公司、单位和个人不得以任何手段复制本书的全部或部分内容.
目 录
0前言4
0。1关于本手册4
0.2名称解释4
0。3技术支持4
1CVS简介5
1。1CVS的特点5
1.2CVS工作思路5
2版本管理5
2。1版本树5
2.2总体处理流程7
2。3CVS 提交中注释的要求10
3CVS服务器的安装与配置11
3。1CVS服务器的安装11
3.2CVS服务器的配置11
4WINDOWS平台下的CVS操作12
4。1WinCVS安装12
4.2WinCVS登录到CVS服务器13
4。3WinCVS基本操作15
4。4修改登录名密码40
5常用规则42
6关于英语单词代表的意思:42
7小小技巧知识43
8需注意的问题44
9未解决的问题44
0 前 言
0.1 关于本手册
本手册详细说明了如何使用CVS进行版本控制的有关操作方法,本手册只列出了常用的与开发人员有关的操作。由于时间仓促,加之知识的局限性,尚有不足之处,还请诸位多多赐教。
0.2 名称解释
§ 配置项:一个信息单元(可以是程序、文档或数据)称为一个配置项(SCI:Software Configuration Item),它是软件配置管理的对象。
§ 基线(Baseline):指已经通过正式审核和批准的某规约或产品,是后续开发的基础,并且只能在正式的变化控制流程之下做修改。
§ 版本(Revision):是经过修改过的版本。
§ 版本号:每个在版本库中维护的每个文件都有自己版本号,版本号可以自己命名或系统自动命名。每个文件在版本系统内的版本都有可能形成一个独立的版本树.
§ 版本标签:是阶段性的版本标记,即Milestone(里程碑)。根据标签可以获取某个特定的完整版本。
§ CVS仓库(Repository):CVS以RCS格式的文件来保存所有配置项,这些文件也按目录组织,最顶层目录称为CVS仓库。
§ CVS模块(Module):CVS模块是CVS的项目组织方式,通常和CVS仓库中的目录对应.
§ CVS服务器:init进程中services-cvspserver.
§ CVS客户:$CVSROOT=:pserver:cvsuser@localhost:/cvswork.
0.3 技术支持
如果您有任何关于本软件的使用或文档方面的问题,请通过电话、Email、MSN 联系如下技术支持人员.亦可进入公司OA系统公司桌面CVS论坛寻求支持信息。
技术支持人员
电话
Email
MSN
赵玉露
0755-8295 5896
zhaoyl@szkingdom。com
jade_dew2008@hotmail。com
0.4 CVS的特点
CVS即Concurrent Versions System,意思是并行版本系统.它是一个当前比较流行的功能强大的版本控制系统,采用典型的客户/服务器结构。CVS具有以下几个主要特点:
§ 免费:其官方网站是http://www。cvshome。org。
§ 跨平台:CVS支持所有的操作系统和跨平台开发,可以用在AIX、Solaris、SUNOS、Linux、Windows等不同的平台上开发应用。
§ 强大的分布式开发支持:CVS一直以支持分布式开发作为其基本特征.
§ 支持并行开发:允许多个开发人员对同一个文件进行开发工作,并对多个开发者的工作进行整合。
§ 强大的可塑性:不论是一个源文件组成的项目,还是代码量超过几百兆的项目,都能够管理自如。
§ 触发器及定制功能:这种功能帮助开发者将CVS和变动/跟踪系统紧密集成,以形成完整的软件配置管理系统(SCM).
§ 使用简单:C/S 结构,WinCVS
§ 实现代码持续集成
§ 得到众多软件商的支持
§
0.5 CVS工作思路
在一台服务器上建立一个仓库,仓库里可以存放不同项目的源程序。由仓库管理员统一管理这些源程序.这样,就好像只有一个人在修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地.用户做的任何修改首先都是在本地进行,然后用CVS命令进行提交,由 CVS 仓库管理员统一修改.这样就可以做到跟踪文件变化,冲突控制等等.
1 版本管理
1.1 版本树
§ Beta_1系统开发阶段
在Beta_1系统开发阶段,由配置管理小组建立子项目的目录结构,开发组自主管理子项目中的配置项,在Beta_1系统开发阶段结束后,由开发小组长组织小组内成员进行单元测试,单元测试通过后,由项目经理对子项目打上版本标签,即Beta_1版.开发小组成员不要随意打任何版本标签.
§ Beta_2系统开发与Beta_1系统测试阶段
开发组在打上Beta_1版标签的主干版本上继续开发,配置管理小组则在Beta_1版本标签上作一分支版本,交由测试组测试,测试组在分支版本上发现的问题,由开发者在分支版本上修正错误,项目经理审核修正后,把修正后的配置项的标签移到最新的版本号上,然后测试组进行错误修正的回归测试,在回归测试通过后,通知开发人员将修正后的配置项合并到主干版本.在Beta_2系统开发结束后,项目经理组织后期开发内容的单元测试,在单元测试通过且测试组完成Beta_1系统的集成测试后,由项目经理设置Beta_2版标签。Beta_2版本标签设置的同时,配置管理员开始冻结此版本,即对修改进行控制,开发人员不能再进行配置项的出库和入库,对配置项的操作全部由配置管理员来进行。
§ Beta_2系统测试
测试组申请整个Beta_2版本出库进行集成测试,对于测试中发现的问题,由开发组进行错误修正,项目经理审核修正后,把修正后的配置项的标签移到最新的版本号上,然后测试组进行错误修正的回归测试。在Beta_2版本测试结束后,测试组负责提交总体测试报告,由配置管理委员会决定此版本是否可以投入生产环境.通过后由项目经理打上product版本标签。
1.2 总体处理流程
下面结合CVS在项目组中的使用,规范编码过程中对于版本控制的运用和产品的交付流程。项目组配置管理工具采用CVS(开放源代码、并发版本控制软件流程),BUG跟踪工具使用的是ClearQuest(缺陷跟踪工具)。因为CVS 只是一个开发一级的版本控制工具,没有版本库、开发库、控制库之间的管理.本文提出关于3个库的一种管理办法,用以保证开发库和控制库之间数据的一致性.
ﻩ充分利用CVS 和ClearQuest 工具的功能,结合项目实际情况,对两个工具进行整合,实现开发、测试、发布的合理化流程,流程图如图2.2。1所示:
图 2。2。1
版本控制是配置管理的基本要求,它可以保证在任何时刻恢复任何一个配置项的任何一个版本。版本控制还记录了每个配置项的发展历史,这样就保证了版本之间的可追踪性,也为查找错误提供了帮助。版本控制也是支持并行开发的基础。当我们在原来的版本基础上需要创建另外一个版本(项目)时,可创建一个分支,在分支上开发另外一个版本。
1.2.1 新项目的开发
各产品/项目的项目经理在项目启动时,需要填写《公司配置库权限申请单》,经部门负责人审核、软件中心负责人批准签字后,交公司配置管理员开通公司配置库的使用空间和权限。
增加新功能或修改程序时,可以在开发主线上随时提交修改内容。修改完成,并通过自己的测试(单元测试)之后,如果需要复审员对代码复审,则开发者要建立复审标签,格式为『REX_产品代号_开发者名字+日期(yyyymmdd)+任务单号』。用来区分多个提交的任务,测试完成后提交测试报告。
具体操作:Remote-Create a tag by module / Modify-create a tag
命名为:REX_产品代号_NAME_YYYYMMDD_[N]
其中: REX —ﻩ表示代码复审(reexmine)
NAME— 表示开发者名字
YYYYMMDD- 为8位的日期,如20060215
[N]— 任务单编号,通过此编号可以知道此次修改要解决的问题—-来自CQ。
发布之前的测试,建立发布测试标签‘REX_产品代号_YYYYMMDD’,在此标签上进行测试,在测试时开发人员可以继续在开发主线上开发新的功能,而不必冻结开发代码。对测试问题修改完善后,再经过测试,直到所有此类问题都解决掉.
具体操作:Remote-Create a tag by module / Modify-create a tag
命名为:REX_产品代号_YYYYMMDD
其中:ﻩREX -ﻩ表示代码复审
YYYYMMDD—ﻩ为8位的日期,如20060215
建立发布标签,即打标签‘REL _产品代号_版本号_YYYYMMDD’.
具体操作:Remote-Create a tag by module / Modify-create a tag
命名为:REL _产品代号_版本号_YYYYMMDD
其中:ﻩREL-ﻩ表示发布(Release)
YYYYMMDD-ﻩ为8位的日期,如20060215
1.2.2 创建分支
当我们在原来的版本基础上需要创建另外一个版本(项目)时,可创建一个分支,分支跟主版本可独立开发,又可以相互合并.如我们的甲项目跟乙项目基本上相同,可直接在甲的基础上创建一个分支。甲上有用的地方直接合并到乙分支上。
具体操作:Remote-create a branch / Modify-create a branch
命名:BR_原产品代号_新产品代号_YYYYMMDD
其中:BR-表示分支
增加新功能或修改程序时,可以在分支上随时提交修改内容.修改完成,并通过自己的测试(单元测试)之后,如果需要复审员对代码复审,则开发者要建立复审标签,格式为『REX_开发者名字+日期(yyyymmdd)+任务单号』.用来区分多个提交的任务,测试完成后提交测试报告。
具体操作:首先update本地为分支版本,然后选中要打标签的文件,执行如下操作:Modify-create a tag
命名为:REX_产品代号_NAME_YYYYMMDD_[N]
其中: REX- 表示代码复审(reexmine)
NAME- 表示开发者名字
YYYYMMDD—ﻩ为8位的日期,如20060215
[N]—任务单编号,通过此编号可以知道此次修改要解决的问题——来自CQ.
发布之前的测试,建立发布测试标签‘REX_产品代号_YYYYMMDD',在此标签上进行测试,在测试时开发人员可以继续在开发主线上开发新的功能,而不必冻结开发代码.对测试问题修改完善后,再经过测试,直到所有此类问题都解决掉。
具体操作:首先update本地为分支版本,然后选中要打标签的文件,执行如下操作:Modify-create a tag
命名为:REX_产品代号_YYYYMMDD
其中:ﻩREX —ﻩ表示代码复审
YYYYMMDD— 为8位的日期,如20060215
建立发布标签,即打标签‘REL _产品代号_版本号_YYYYMMDD’。
具体操作:首先update本地为分支版本,然后选中要打标签的文件,执行如下操作:Modify-create a tag
命名为:REL _产品代号_版本号_YYYYMMDD
其中:ﻩREL— 表示发布(Release)
YYYYMMDD— 为8位的日期,如20060215
1.3 CVS 提交中注释的要求
CVS 在提交代码时需要填写提交的注释,项目组使用统一格式来达到规范的目的.
提交注释的格式—-【符号 [模块名] 详细注释 】
“符号”可以是‘!'、‘~’ 两个符号之一。表示开发工作的两种状态:完成‘!’和进行中‘~’.
完成—‘!’,表示经过测试完成,可以提交到控制库。
进行中—‘~’,表示正在对问题和功能处理中,此部分提交的内容只是表示开发库的内容,还没有测试完成,不能提交到控制库之中。
‘[模块名]’表示修改的是哪个模块。
‘详细注释’要指出此部分的提交属于哪部分内容:包括:新增加的功能、删除旧的功能、修正错误、计划要完成的功能等等,还要详细说明为什么进行代码的修改,以及进行了什么样的修改。
例如:以下是修改提交注释(注意符号和中括号之间有一空格):
! [发行后台] 增加功能,解决打印总是出现乱码问题.修改了打印函数 f_print() 第50行的打印语句 print。
2 CVS服务器的安装与配置
本章介绍Linux平台下CVS服务器的安装和配置
2.1 CVS服务器的安装
服务器操作系统是linux操作系统,linux操作系统自带有CVS安装.可以使用linux自带的CVS安装,然后下载升级包进行升级。也可以到开源网站https://www.cvshome.org/下载安装包自行安装.
2.2 CVS服务器的配置
1、检查确保系统已安装CVS:
rpm —qa | grep cvs
2、建立CVS用户组:
groupadd cvs
3、创建CVS属主用户
# useradd –g cvs –d /home/cvsroot cvsroot
4、建立CVS仓库(初始化CVS)
# chmod 775 /home/cvsroot
$ cvs -d /home/cvsroot init
5、启动CVS服务器:
首先在/etc/xinet。d目录下新建文件cvspserver,cvspserver的结构如下:
service cvspserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f -—allow—root=/home/cvsroot pserver
log_on_failure + = USERID
only_from = 192.168。0.0/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改.
然后,重新启动xinetd:# /etc/init/xinet。d restart
6、检查cvspserver服务是否启动
netstat -l | grep cvspserver
ﻩ结果: tcp 0 0 *:cvspserver *:* LISTEN
7、创建用来访问CVS的用户
仓库中CVSROOT目录里可以添加三个配置文件:passwd,readers,writers。可以通过设置这三个文件来配置CVS服务器:
passwd:cvs用户的用户列表文件,格式如下:
{CVS 用户名}:[加密的口令]:[等效系统用户名]
加密口令:htpasswd –c filename username
例:lill:kd7MmHzjkp882:cvsroot
readers:有 CVS 读权限的用户列表文件,是一个一维列表
writers:有 CVS 写权限的用户的列表文件,是一个一维列表
增加用户:
htpasswd –b passwd lill lill //-b 把用户增加在passwd文件下.Lill是用户名,第二个lill是密码。
ﻩVi passwd 进入passwd,点击I
ﻩ 在增加的一行后面添加 :cvsroot
默认读写权限,如果读权限,在readers文件中添加此名字即可.
3 Windows平台下的CVS操作
本章介绍Windows下的CVS客户端工具WinCVS的操作。
3.1 WinCVS安装
WinCVS安装包可以到公司网站http://mail。szkingdom。com/tools/tools1 下载 WinCVS20。rar。
具体安装过程:首先运行wincvs_setup。exe安装WinCVS。在安装过程中,会提示安装cvsnt,安装即可。安装完毕,运行python—2。3.1。msi,直至安装结束。
注意:需在我的电脑中的环境变量中设置python的环境变量;有时还需在防火墙中的“例外”中把CVS相关的程序设为例外;在本地连接中网关设置为:255。255。0.0,而不是255。255.255。0
3.2 WinCVS登录到CVS服务器
在WinCVS安装完成后,运行WinCVS,选择菜单”Admin”à”Login"登陆,如图4。2。1:
图4.2.1
然后进入如下信息:
:pserver:lill@192.168。40。232:/home/cvsroot/test
其中:lill是用户名;
192。168.40。232是服务器IP地址;
/home/cvsroot/test是模块路径.
如图4。2。2所示界面,不同用户需要修改用户名和文件名,替代“lill”和“test”。
用户名是:每个人自己的姓的全拼 + 名字的每个字的拼音的第一个字母,如李丽丽的用户名称是lill(密码另行通知);
模块名是:所负责产品的代号.
图4。2.2
Globals选项,如图4。2。3所示:
图4.2.3
此项的配置主要是要注意以下两点:
第一,Prune (remove) empty directories选上,会自动删除空目录;建议如果需要保存空目录,在空目录下面存放一个readme.txt文件,防止删除空目录,也可以记录文件信息。
第二,对一般配置没有特殊要求的,把Supply control when adding 选项选中
配置好后点击确定,出现输入密码框,如图4。2。4:
图4.2。4
输入密码后,点击OK登录。登录成功,会在下方的状态视图里显示“CVS exited normally with code 0”,如图4。2.5所示。注意,每次操作的时候状态视图都会有操作结果的显示。操作成功返回代码0,非零的代码说明有错误产生。
图4.2。5
3.3 WinCVS基本操作
3.3.1 建立工作目录
在本地硬盘建一个自己的工作目录(以后检出的工作拷贝就会放到这个目录下),比如D:\test,在WinCVS地址栏中选定该目录(如图4。3.1.1)。
图4。3。1。1
3.3.2 Checkout检出
1、CHECKOUT工程模块,如图4.3。2。1
图4.3。2.1
也可以在左侧树结构处点击右键选择‘Checkout module’,如图4。3。2。2
图4。3.2.2
2、进入配置目录,如图4。3.2。3:
(1)Module name and path on the server:输入要检出的模块名,是所要下载的CVS服务器上文件的目录名;或者点击浏览服务器上的内容,如图图4.3。2.3红色所示,出现如图4。3.2.4,选择list和 cvsroot,点击refresh,刷新列表,就是服务器上本模块下的内容。选择一个文件,如a文件,点击OK后就选中了该文件,又回到图4.3。2.3。
(2)图4。3.2。3中,Local folder to checkout to:本地路径,下载的文件所放的本地路径(例子中是E:\checkout\);
(3)图4。3.2.3中,CVSROOT:选择CVSROOT路径
(4)点击确定,即可将a模块检出到本地硬盘。
图4。3.2。3
图4。3.2。4
3、确定后,CHECKOUT成功会有如下提示,如图4。3。2。5所示。
图4。3。2。5
CHECKOUT 成功以后的本地目录内容,如图4.3.2。6:
图4.3。2.6
3.3.3 Import上传
1、 import工程模块,如图3。3。3。1
图3.3.3.1
也可以在左侧树结构处点击右键选择‘Import module’,如图3。3.3.2
图3.3.3。2
2、进入配置目录,如图3.3。3。3:
(1)Repository:输入文件名,是上传到CVS服务器后该文件的名称,例子中是test;
(2)CVSROOT:选择CVSROOT路径
(3)在图中箭头所指处填入上传信息,即日志文件。
图3。3.3.3
3、如果要求上传后文件日期不变,需要选择import options框的选项,如图3.3.3。4红色所示.否则,文件日期是你上传时候的服务器日期。
图3.3.3.4
4、确定后出现如图图3。3。3.5所示。
注意:这里是查看上传文件的格式是以二进制(binary)还是文本文件上传。对于能用文本文件打开的文件,最好选择文本(text)上传,这样有利于文件比较。对于不能用文本文件打开的文件,需要选择二进制(binary),否则下载下来文件可能打不开或者有问题不能使用。
如果查看文件类型不正确,比如:.rar文件的上传类型(Entry kind)是txt,那就不正确,需要修改.选择.rar那行,点击左下角的Edit,选择二进制(Force binary),确定即可.
图3。3。3。5
4、确定后,Import成功会有如下提示,如图3。3。3。6所示.
图3.3。3。6
注意:成功后,要删除本地目录,重新从仓库中Check Out出来,才可以进行下一步动作。
3.3.4 Update得到最新版本
Update得到最新版本,是将服务端文件更新到本地
在对本地的文件修改前,最好先从服务端更新文件,因为多人操作同一个文件时,没有及时更新容易引起冲突。如甲乙检出的版本同为1。2,修改提交后的版本为1。3,乙此时没有更新,在本地1。2的基础上修改提交,此时就会产生冲突。
更新文件,点击选中文件(可多选),从右键菜单中选择”update… ”,如图4。3.4。1,出现如图4。3。4。2,选择两个控制项,确定即可.
如图4。3。4。1
图4。3。4.2
注意:
(1)第一个是Get the clean copy,大家一定要慎重使用这个复选框,它的含义是从服务器上得到完全的拷贝,并且覆盖本地的同名文件,如果选择了这一项,那么本地上你所做的全部工作都将丢失,因此在实际工作中该项一般是不选的,一旦误操作那么所有的工作都将全部丢失.
(2)Create missing directories that exists in the repositories,它的含义是如果服务器上含有你本地没有的文件夹,WinCvs会自动在你本地创建该文件夹,否则不会在本地创建该文件夹,那么你本地的文件就会比服务器上少,所以一般这个选项需要选上,除非你能保证同一个开发小组的其他人员没有创建新的文件夹。
(3)Checkout 与 Update的区别:Checkout是把CVS服务器上的module下载到本地进行工作。该操作一般只在项目开发的最初进行一次. Update主要同步本地文件(目录)和CVS服务器库中相应文件(目录)之间的差异,使本地相应文件是最新版本,另外Update也能执行获取文件旧版本的操作。
如果需要提取项目的某个版本的文件。则点击update后做如图4.3。4。2的选择,然后再作如图4。3。4。3的选择.By revision/tag/branch 处选择标签或者分支名称.
图 4。3.4。3
如果要查看某个日期之前的文件,则点击update后做如图4。3。4.2的选择, 然后选择By date,如图4。3。4。4
图4。3。4.4
查看了某个版本或者某个日期的项目之后,现需要提取当前服务器上最新的文件,除了做4。3。4.2的选择外,还要做如图4。3。4。5的选择.这样就可以提取当前服务器上最新的文件.
图 4.3。4.5
执行上述操作之后,当前拷贝中的文件与仓库中的文件内容完全一致。特别需要注意的是,如果某个文件在仓库中已经被删除,那么更新之后,工作拷贝中的该文件也被删除了。CVS这样做是为了让工作拷贝与仓库完全一致。
3.3.5 Commit提交修改内容
从服务端checkout项目后,会在本地建立文件的拷贝,在客户端修改后提交(commit)到服务端即可将最新的文件保存到服务端。如图4。3。5.1,修改后的文件显示为红色。此时的修改只修改了本地的文件。
图4.3.5。1
如果要提交到服务器端,点击选中被修改过的文件,从右键菜单中选择”commit …"命令,出现图4。3。5.3,在箭头所指的框内填入修改信息,即log日志,点击确定即可提交到服务器。
图4。3。5。2
图4.3。5.3
提交到服务器后,文件版本会自动加1。如图4。3。5。4
图4.3.5。4
如果修改了不同文件夹中的几个文件,现想查看修改的所有文件,则选中根目录,点击两个按钮,如图4.3。5.5红色所示,有侧区域即显示所有修改的文件。
图4。3.5。5
如果需要一次性提交,则选中根目录,右键commit,如图4.3。5。6,然后出现图4.3。5。3所示的界面,填入log信息,提交即可。
图4。3。5。6
3.3.6 Add 添加文件
在本地添加文件后提交到服务端,先选中文件,然后点击“添加按钮”,注意此时有两个按钮,一个添加一般的文件;一个添加二进制文件。如图4。3。6。1红线所示。添加文件后,文件图标会变成红色,表示确认添加,但是还没有添加到服务器上,需要右键菜单中提交命令“commit …”才真正提交到服务器上,如图4。3。6.2。
图4。3.6.1
图4.3。6。2
3.3.7 Remove,Erase移除文件
Erase:只是在本地删除,不影响服务器。
点击erase,如图4。3。7.1,然后弹出询问框,是否确认删除,如图4。3。7.2,点击OK即可。
图4.3。7。1
图4.3.7。2
Remove:选择文件后,点击remove,如图4。3。7.3,将文件从本地删除,图标变成红色的.然后选择刚刚的文件,从右键菜单中选择“commite…"命令,如图4.3。7。4,才将服务端的文件删除.
图4。3.7.3
图4。3.7.4
3.3.8 删除文件夹
要删除文件夹,需要首先把文件夹下面的文件利用remove删除掉,详见4。3。7小节。然后选择本地目录的根目录,点击右键选择update,在globals中把prune empty directories打勾选择上.确定提交即可.如图4.8.1所示.
图4。3。8。1
3.3.9 找回被删除的文件
Erase:
Erase操作只删除本地文件,不影响服务器上的文件。所以如果使用Erase操作删除了该文件,则点击根目录,右键update即可
Update后出现如图4。3。9。1对话框,选择两个控制项,确定即可。
图4。3。9。1
Remove:
如果只是点击remove(这是remove后的文件)删除文件,没有commit,则点击Add添加按钮即可将文件找回;或者『ctrl+L』直接输入命令:cvs add ***
如果执行了remove后,又执行了commit,这时文件已经从服务端删除,如果要找回被删除文件,则需要执行如下操作:
1、 只能用『ctrl+L』,直接输入命令:cvs add ***,如图4。3。9.2所示,确定后会得到一个空文件,如图4。3。9。3。
图4.3.9。2
图4.3。9.3
2、选中这个空文件,执行update操作,得到这个文件实体。
3、再次选中这个文件,执行commit操作,得到这个文件的最新版本(在原来被删除版本的基础升级一个版本)。文件的历史版本仍然存在。如图4.3。9.4。
图4。3.9。4
3.3.10 避免冲突
CVS的无限制的版本管理检出的模式,就是检出一个文件并不给定开发者对那个文件的排它权,其它的开发者也可以对其检出,进行他们自已的修改,并且将其登记回去.
你可能会问:“后面的登记不是会覆盖前面的吗?”回答是不会的。会自动合并那些改变,但是,如果前后两人修改了相同的地方,可能引起冲突,CVS把冲突段保留,由用户手工解决.
Commit时报‘Update—to—date check failed ',说明有冲突
尽量避免的办法就是:
1、COMMIT前先UPDATE
2、修改别人的文件前最好先通知对方
3.3.11 查看文件状态
在“Query”菜单下有Diff、Log、Status、Graph等操作,如图4.3.9。1
1、 Diff:是将本地拷贝与对应目录或文件任一版本进行比较;
2、 Log:显示指定文件的所有修订版本的日志信息、日期、标记与作者等;
3、 Status:显示指定文件的状态,如文件是本地以及库中的版本号等;
总共可能有四种状态:
(1)Up—to-date:表明你要到的文件是最新的.
(2)Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.
(3)Needs Patch:表明有个哥们已经修改过该文件并且已经提交了!你的版本比仓库里的旧.
(4)Needs Merge:表明你曾经修改过该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交给仓库了!
4、 Graph:显示指定文件的修改状态,如文件是本地修改还是库中修改,还显示修订版号。本地修订本标记为文档图标(红色的矩形框)。在此,你可以选择两个修订版本比较(diff),用shift键,(注意:图形中红色的虚线框表示已经删除了的版本)
图4.3。9。1
命令:cvs diff Unit1。pas
在状态窗口中会输出比较结果.
Index: add。txt
============================================================
RCS file: /home/cvsroot/test/a/ni/add。txt,v
retrieving revision 1.1
diff —r1。1 add。txt
0a1
> aaaaaaaaa
\ No newline at end of file
注意这里输出结果是UNIX的diff命令的输出格式。其中0a1表示在原来的版本的第一行后面添加(a-add)了内容,这个添加的内容在新版本里的第二行。输出中,以“〈”开头的行是原有版本的内容,而以“〉”开头的行是新版本的内容,“-—-”表示在两个版本之间的界限。
命令:cvs log filename 查看某文件的日志
5、 Annotate:show the history of each line of a file with cvs annotate(注释)
3.3.12 增加文件和目录
当你创建了想要放到库中的文件时,你要告诉CVS要做相应处理。如果目录包含不在CVS控件制下的文件,你需要增加目录。增加文件或目录,要:
1、 选择你要增加的目录或文件
2、 选择Modify—〉Add或Add binary菜单,对于非文本文档,选择二进制,免得文件会补CVS破坏掉
3、 文件只是被标记为添加,你要通过交(commit)将其增加到库.
如果你要增加一个目录层,而不是几个文件,上面的技术有点麻烦,加上CVS操作不支持增加子目录.在这种情况下,你要使用Import,就像创建新模块。
1、 选择Create—〉Import module菜单.
2、 在弹出的文件对话框中,选择你要增加的目录,并使这个文件夹打开。
3、 WinCvs然后试图辨别目录树中的任何二进制文件.如果弹出了筛选窗口,确保提及的文件被正确地设置了文本或二进制。
4、 在Import settings输入设置对话框,输入模块名。
5、 在Wendor tag厂商标记栏输入你的名字或公司的名字(没有空格)。
6、 在Release tag发行版本标记栏输入相关名称。
7、 点击“确定”。
WinCvs然后将整个目录结构输入到CVS服务器中。注意在输入操作中对你的本地文件没有任何改变.也就是说,在输入后,你的本地拷贝没有置于版本控制下。在对你的版本控制源文件工作前,你需要做:
1、 移走你的原始目录.
2、 在WinCvs中,再Check Out出来即可.
这样,WinCvs就提供了最新置于版本控制下的目录层。
3.3.13 对文件和目录移动或改名
对文件和目录移动或改名的操作在CVS中是不允许的.这是CVS的一个不中之处。你需要合并删除和增加操作来模拟移动或改名。参见增加文件和目录以及删除文件夹。
注:在实际操作中,用户可以直接到CVS服务器上,在库目录下,直接对相应的文件作相应移动和改名操作。新文件名要符合CVS库文件的命名规则.一般情况下,不建议用户直接到CVS服务器上直接修改。修改时,注意文件的属主和存取权限.
具体操作如下:改文件的名字后的操作:cvs中原来那个文件还在,彻底删除,先remove再commit,而改过的新文件需先add再commit。
3.3.14 创建标签
v
tag:顾名思义就是做个标签,如张三的文件,他就可以做个标签为”张三”以表明是他的文件。Tag只是在文件上做了一个标签,并没有创建不同的文件,这一点跟branch不同。tag是标志用户特定信息的。
创建标签,如图4。3。10。1,选择Create a tag by module,进入图4。3.10。2,填写tag名字,模块名和CVSROOT路径,确定即可。
图4。3.10.1
图4.3.10.2
注意:CVS对有版本标签(分支标签不同)的文件不能进行提交.CVS不允许在已经基线化的版本上进行任何修改,只能在主版本,或分支版本上进行修改.
3.3.15 创建分支
Branch:分支是个很有用的概念,当我们在原来的版本基础上需要创建另外一个版本(项目)时,可创建一个分支,分支跟主版本可独立开发,又可以相互合并。如我们的甲项目跟乙项目基本上相同,可直接在甲的基础上创建一个分支v_ds。甲上有用的地方直接合并到乙分支上。
一般是有个发布版v1.0,在开发v1。2的基础上,同时又在修改v1。0,这时就可以创建分支。
创建分支,和创建标签类似,如图4。3.10。3,选择Create a branch,进入图4。3。10。4,填写branch名字,模块名和CVSROOT路径,确定即可。
图4。3.10.3
图4。3.10。4
要检出特定标签或分支的文件版本,可以右键选中文件夹(或文件),右键点击后选择"Update selection”. 选中“Creating missing directories that exist in the repository",切换到“Update options”选项卡,在“By Retrieve rev。/tag/branch”中填入要切换到的分支名,确定即可。如图4。3。10。5所示:
图4。3.10。5
如果需要停止在分支上的工作,返回主版本。首先保证分支版本已经完全更新到仓库中。然后需要删除sticky标签并更新本地拷贝为主版本的工作拷贝。选择相应的目录或文件,右键点击后选择“Upda
展开阅读全文