CVS操作手册28p.docx
《CVS操作手册28p.docx》由会员分享,可在线阅读,更多相关《CVS操作手册28p.docx(37页珍藏版)》请在冰豆网上搜索。
CVS操作手册28p
CH1.WINCVS使用简介
1.介绍
本章简要介绍了WINCVS开发人员的日常使用和使用中可能会遇到的问题及解决方法。
本文试验所使用的WINCVS版本是1.3.17.2BETA17,如发现与本文不一致的地方,请注意是否版本问题,强烈建议安装本版本。
结果显示输出区
工作扩展区
工作区
/工作目录
/本地工作副本
工具栏
2.登录
安装完毕WINCVS后打开,选择菜单项的adminperference设置
General页面设置路径和用户名:
CVS页面设置
WinCvs页面设置
设置完毕后选择adminlogin登录,弹出的对话框可以在General页面核对一下用户名和路径是否正确。
输入密码后会提示:
*****CVSexitednormallywithcode0*****
表示登录成功。
如code为1则不成功,如果密码输入错误会提示:
cvs[loginaborted]:
authorizationfailed:
server192.168.100.152rejectedaccessto/home/cvsrootforusertest
或
cvslogin:
Emptypasswordused-try'cvslogin'witharealpassword
重新login输入正确密码即可解决。
如果是低于1.3.17版本的wincvs,登录时可能会出现.cvspass文件出错的提示,只要按照提示找到相应的.cvspass文件,删除其中的内容即可。
3.创建新项目
创建新的项目或建立新模块,在准备好的程序目录中必须保证不带任何cvs的控制信息,比如我们从154上取下的模块,仅仅简单地删除其中隐藏的CVS文件夹是不够的,我们需要使用release来彻底断开与cvs的关联才可以重新import进新的CVS仓库。
选定本地要导入的目录,在菜单栏里选择remoteImportmodule…
CVS会对这个目录进行过滤,检查其中的文件格式,
检查此时的文件格式是否正确,如有不一致的地方可选中文件类别进行EDIT:
选项依次为:
保持不变;强制转换为二进制;强制转换为unicode;强制转换为文本;关闭关键字扩展;对于不需要放进仓库的某一类型的文件,可使用Ignore来忽略。
格式设置完毕以后,点continue继续:
这里的三个输入框必须注意:
Repository指的是需导入的目录名,将作为模块名导入仓库。
Vendortag指定程序的提供者,releasetag应尽量避免重复。
注意一点,在import进去一个目录以后,是需要重新checkout下来的,可以先把这个目录改个名字,以免产生错误。
4.取仓库模块
我们需要从CVS上检出模块、源码、目录或者特定的文件集合到本地做开发或修改。
在菜单项上选择remotecheckoutmodule…弹出如下对话框:
在Modulenameandpathontheserver框中输入要检出的模块名就可以直接取出模块,输入可以是汉字,英文,大小写有区别。
如果想查看仓库里其他模块情况可以点右边的button会出现一个列表:
列出的这些模块是在~/CVSROOT/modules文件中定义出的,这可是郑姐姐建议的哦:
)如果有足够的权限,可以不用逐个检出单独的模块而通过定义好的模块来取整个项目的所有信息。
在Globals页面中需要选定checkoutread-only令检出的模块只读。
编辑文件时在菜单栏中TraceEditSelection即可进行修改。
在checkoutoptions页面中可以选Byrevision/tag/branch来指定需要取得版本、标记或分支。
选Bydate检出指定日期前的最新版本。
选Resetanystickytags/date/kopts来清除粘滞性标签(ch22.7)。
注:
checkout不能检出单独文件
5.将服务器的修改更新到自己工作目录
当服务器端有了修改,我们可以用update来把这些修改更新到本地。
Update可以针对整个模块、某一个目录或者是单独的文件。
选定需要更新的对象,点右键选择updateselection…
在弹出的updatesettings页面中
选择Createmissingdirectoriesthatexistintherepository添加本地目录中没有的目录
选择Resetanystickydate/ta/’k’options清除粘性标签,检出时指定的版本号将会成为
stickytag,用于限制修改。
详见CH22.6关于stickytag
选择GettheCleancopy将会取下服务器上的文件覆盖本地副本,当前修改丢失。
CH1.12
Updateoptions页面中选retrieverev./tag/bran可以指定强制更新到某一个版本
Beforedate可以更新到指定时间之前的最新版本
Mergeoptions页面中选onlythisrev./tag把指定版本合并到当前版本中来
Pluswiththisrev./tag把前一个版本合并到后一个版本中,版本号取新的。
如:
update之后将把1.4版本恢复到1.2,未提交时版本号为1.4,提交后此项更改生效,版本号变为1.5。
此操作只改变了1.4版的内容,所有版本号不受影响。
6.将自己的修改提交到CVS服务器
把修改提交到仓库。
多人同时开发时,为避免提交时产生冲突,提交之前最好先做update。
Update会把更新合并到本地,给解决冲突提供了机会。
commitoptions页面做重要的提交时要注意填写提交信息。
commitoptions页面中选择Forcecommit(evenifnotmodified)可强制提交
commitoption页面中选择Forcerecurse令提交操作可以递归,如果需要提交整个模块或者带子目录的目录的话。
7.冲突
如果做commit操作之前没有做update,而同时同一个文件有人做了改动,CVS会发出错误提示:
server:
Up-to-datecheckfailedfor`~~/filename'
cvs[serveraborted]:
correctaboveerrorsfirst!
这时就是产生了冲突,首先应该做update把CVS上的变动合并到自己本地文件中,同时在目录以.#filename.1.X保存了本地未做修改的原版本文件。
cvs以如下方式标记合并:
<<<<<<<和=======之间的部分是自己修改的部分,=======和>>>>>>>1.x之间是其他人提交到CVS仓库的修改。
内容的取舍由开发人员协定。
8.从本地添加文件和目录
a.添加文件
本地工作目录中没有放入CVS仓库的文件会以
形式标出。
要添加到仓库中去,我们可以使用右上方的
按钮来操作。
第一个图标表示以文本方式添加,一般源代码以这种方式;第二个带01标志的表示添加格式为二进制,对应的文件格式一般是DOC文档,图片之类的,这个在~/CVSROOT/cvswrappers文件中有定义。
己添加的文件有一种转码的方法,就是先点
删除,然后以
方式添加后提交即可。
这种方式并不破坏RCS文件,版本保存完整。
b.添加目录
由于CVS的add命令不是递归的,所以在添加非空目录的时候要先把目录加上(直接点
就可以),然后逐个添加目录中的文件。
如果有大批量的非空目录需要添加,可以使用import方式。
所有的添加都在commit之后生效。
9.从本地重命名文件和目录
重命名文件在CVS上操作的时候我们可以当做把一个文件以新的名字备份,添加到仓库,然后再删除旧文件,这是最安全的方式,适用于变更小,不受版本影响的文件。
a.建立文件和目录的备份,名称定为需要改成的名字
b.删除原文件和目录
c.添加新文件和目录
d.目录重命名了以后要手动添加目录下面的文件,还要注意是否需要改动modules文件,以保证模块定义与实际一致。
OK.
另外有一种重命名的方法,见管理员手册部分2.5重命名文件和目录
10.从项目中删除文件
删除操作总是要特别谨慎的。
一般来说在CVS中直接操作是不允许的,这个就交给配置管理员来做吧。
选中要删除的文件后,右键选择removeselection者点右上角的或
都可以。
Remove以后文件标志会变成
,这时文件还没有完全被删除,只有在commit之后这个文件才会彻底从仓库里删除。
11.恢复己删除文件
有时候我们做了删除操作以后大吃一惊,哎呀,删错了!
别急,有办法。
1.如果在commit之前发现删错了,即文件状态是
时,恢复方法:
直接点右上角的
添加一下,再做commit就可以恢复了。
2.如果己经commit了,恢复也是可以的:
把备份的文件放到当前工作目录中,点
进行添加,然后做一个update操作,再commit一下,刚刚删掉的那个文件就会重新出现在工作列表中了:
)不过由于原来的文件己经删除了,虽然可以重新添加,但是过去的版本记录己经丢失了,这点要注意。
12.放弃修改
有的时候我们需要放弃自己本地做的修改,比如打开一个文档后未做修改文档属性就变为modified,对于不希望有改变的文件,可以使用update的getthecleancopy选项将服务器的版本覆盖本地的副本。
13.查看文件修改记录
CVS的特性之一就是会记录下所有人对文件所做的操作,可以通过查看日志的方法就可以了解谁在什么时候对哪个文件进行了什么修改。
如前面提到的,如果大家在做重要提交时都写上提交信息的话,日志信息会更有助于我们发现问题所在。
查看方法:
选中所要查看的文件或目录,右键打开logselection…就可以进行查看了。
如下图
可以清楚地看到哪天是哪个人做了多少改动。
14.查看文件状态
通过status可以查看本地工作目录文件状态。
方法:
右键选择statusselection…
状态大致有以下几种:
Up-to-date、LocallyModified、LocallyAdded、LocallyRemoved、
NeedsCheckout、NeedsPatch、NeedsMerge、Unknown
15.查看版本记录
通过Graph可以查看某一文件的版本历史如图:
清楚地显示该文件版本进展状况。
可以直接选中某一版本操作
可进行的操作:
将标记设为StickyTag、清除StickyTag、取下该版本到本地、以别名取下该版本到本地、直接编辑该版本、打开该版本、比较本地文件与该版本区别等
16.查看谁正在修改
在介绍取模块时我们提到要设定checkoutread-only令取下的模块只读,欲对模块文件修改时选中TraceEditselection或者左上角的
就可以了,
这样做是为了别人能够知道是否有人同时在对这个文件在进行操作和修改,做到心中有数。
(当然,如果不需要使用此项功能,只要在取模块的时候设定Checkoutread-only为空就可以了)
选中editselection时文件的只读标记会被清除:
你此时是test,同时mdm也对test.txt文件edit了一下,你们两个用editorsofSelection就可以看到两个人都在对这个文件进行编辑:
如果一会update有冲突的话你就很容易知道是谁动了这个文件了。
修改完毕提交后就可以自动回复到只读状态。
17.不同版本内容比较
比较版本可用右键选择diffselection…(本功能只适用于文本文件)
1.如需查看本地当前版本是否与服务器上有区别,可在diffsettings页面diffcompareoptions中选择Localcopyagainstthesameremoterevision
2.比较当前和另一版本差异,选Localcopyagainstanotherrevision/tag/branchordate
3.比较两不同版本之间的差异,选择Tworevision/tags/branchesordatesagainsteachother
CH2.CVS管理员使用手册
1.常用CVS命令
命令格式说明:
基本格式以蓝色字体标明,蓝色的option为可选项,必选的选项以橙色、
重要的选项以红色标示,请注意。
1.1import导入源码
命令格式import–mmessagerepositoryvendortagreleasetag...
导入源码到CVS上,用来新建一个项目或大批量更新代码。
命令格式中后三个选项是必须的。
repository指定需导入的目录名称,vendortag指定分支标记,releasetag用来区分每次导入的唯一。
用这个命令进行代码更新时,更新版本将固定在同一个分支上。
例如:
首次导入的版本为1.1.1,更新一次后的版本则为1.1.2
因为~/CVSROOT/cvswrappers(详见下节说明)会把文件名匹配相应格式的文件按包来对待,并让CVS进行过滤,所以我们不用对每一个文件进行设置。
然后,如果我们用命令行import的话一定要记得用-W这是一个比较重要的option,
他会令cvs对import的程序包进行过滤,如果有不同的类型同时存在,它会以不同的方式来处理,所以每一种格式都要指定-W,这点必不可少。
不过一般来说我们用WINCVS里的import选项就可以了,它会自动针对不同类型做不同动作,在做了IMPORT之后我们可以看它生成的命令行.
1.2checkout检出模块
命令格式checkout–rtag–Ddate–jx–jymodules
从CVS上检出模块、源码或目录,还可以检出特定的文件集合,比如管理员在~CVSROOT/modules文件中定义好的。
不指定任何选项时,checkout检出仓库中模块的最新版本。
主要选项常用到的就是-r,它是用来指定tag的,比如技术支持每次要取的发布版本就是通过指定tag检出的。
当然也可以按日期来检出,用-D选项。
另外两个比较重要的是-A和-j。
-A是完成清除sticktag的,检出不带任何stickytag的模块当然是令人比较省心的。
-j(jion)合并修订版间的修改到工作目录,
两个-j选项:
checkout–jx–jyfilename与update–jx–jyfilename接近,都是将两个版本号的前一个合并到后一个,通常x是大于y的,换种说法就是将文件恢复到某一个旧的版本。
当然,版本号取的仍然是新的。
当x小于y时,就是把x合并到y.
一个-j选项:
合并指定版本到最初的版本or合并分支到主干
例如,要取消1.3与1.7之间所做的修改,命令行就是checkout–j1.7–j1.3FL1,也就是undoallchangesmadebetween1.3and1.7.检出的版本显示的版本号为1.7,,提交后保存此次合并,实际版本变为1.8。
1.3update更新工作列表
命令格式update–p–r–A–C–jx–jyfilesname
update使本地工作目录与仓库的更新同步。
他令仓库里面的修改合并到本地目录,这样可以为多人同时开发提供了减少冲突的可能。
选项说明:
-A清除stickytag`-A'选项将把本地的改变合并进树干顶部的文件,并且忽略中间的任何粘性标签、设置日期或选项。
使用此选项同客户端updatesettings里的Resetanystickydate/tag/’k’options
-p清除空目录同客户端Globles里面的pruneemptydirctories
–r更新到版本tag同客户端updateoptions里的retrieverev./tag/branch
–C放弃修改,将服务器版本覆盖本地副本。
–j跟checkout的-j选项相似,区别就在于update可以对单独的文件进行合并,而checkout最小单位必须是…目录-jx–jy在客户端的mergeoption里面选择pluswiththisrev./tag可选填X和Y。
一个-j选项则合并指定版本到最初的版本or合并分支到主干。
1.4commit提交修改
命令格式commit–l–R–r–ffilesname
把修改提交到仓库。
为避免提交时产生冲突,commit之间最好先做update。
Update会把更新合并到本地,给解决冲突提供了机会。
选项说明:
-l仅在当前目录运行–R递归操作–r提交到某一版本,些版本必须是分支或主干上的最新版–f强制提交;单独使用时与-R相抵制,禁止递归操作。
Commit本身不是可递归的,如果对顶级目录进行了commit,只能提交当层目录中的文件,并不影响子目录。
如果需要提交整个模块,需要选定commitoption里面的Forcerecurse令提交操作可以递归,些操作与使用-R选项相同。
如果想要强制递归提交可同时选用-R与–f。
1.5tag与rtag本地标记与仓库标记
tag命令格式tag–b–c–D–d–l–R–rfilesname
给文件打标签,它作用于本地工作目录
选项说明
-b建立分支-c检测未提交的文件–D给date的修订版打标签–d删除标签–R递归执行–r给己经打好的tag打标签,即标记重命名,不删除原标记。
–l当前目录运行
rtag命令格式rtag–a–b–D–d–lmodulesname
给仓库内容打标签,不需检出模块,也不寻找工作目录
选项说明
-a清除粘性标签–b建立分支–D给date的修订版打标签–d删除标签–l当前目录运行。
在WINCVS中的createatagonselection..与tag同;createatagonmodule..与rtag同。
1.6add、remove添加与移除文件或目录
见WINCVS使用简介8添加文件和目录、10删除文件
1.8diff比较两不同版本之间的区别
命令格式diff–l–R–D–rfilesname
无选项时默认为本地文件当前版本与服务器版本比较
选项说明
-l当前目录运行–R递归操作–D指定日期比较–r指定标记版本比较。
对于date与tag之间的影响关系尚需进一步验证
1.9log查看日志信息
命令格式log–l–h–t–d–b–N–R–r–s–wfilesname
显示日志信息
选项说明
–l只在当前工作目录运行(默认递归)–h只显示rcs文件名
–t同`-h',外加说明文字–d显示版本提交的日期,分号隔开列表
–b显示默认分支上的版本信息,通常是主干最新
–N不显示文件的标签列表–R只显示rcs文件的名字
–r显示由逗号分隔的revisions列表指定范围内的版本
–s显示匹配状态列表的修订版–w显示列表指定用户提交的修订版
1.10release断开文件/目录与CVS的关联
命令格式release–ddirectories
-d如果成功,删除工作目录中文件的副本
!
release命令递归地删除所有的目录和文件,如果有未添加到工作目录的文件,将无提示地被删除,除非你想彻底删除本地文件,否则不建议使用!
1.11export取模块(不含CVS信息)
命令格式export–r(tag)–D(date/now)–ddir(本地目录名)–lmodulename
与checkout基本相同,但它取出的是不含CVS信息的模块/项目目录。
选项说明:
-r指定标签–D指定日期,不迟于该日期的最新版
-d指定检出模块放置的位置,该目录名将替代目标模块名。
-l检出模块放到当前目录中,模块名不变。
当不指定–l和-d选项时CVS会将目标模块取到当前目录。
1.12history查看历史信息
命令格式history-c-e–m-o-Tfilesname
显示历史记录。
从~/CVSROOT/history文件中提取信息查看用户所做的各种操作的历史记录。
选项说明:
-c显示每次提交-e显示所有记录类型–m显示特定模块历史
–o显示检出模块历史–T显示所有标签
例如:
要查看用户user的历史操作记录history–e–zuser
2.CVS常见问题及解决方法
2.1查看目录
能够查看CVS仓库中所有文件目录恐怕是大家接触到CVS的时候最大的愿望了,可惜我们目前的CVS版本不能做到这一点,所以像VSS那样清晰地对文件和目录了如指掌暂时仍然是个梦:
(不过还是可以看一下CVS中所有模块和特别定义的模块的。
方法一、以命令行方式输入cvsco–c可以查看管理员在~CVSROOT/modules文件中定义的模块。
方法二、是在checkout需要输入模块名的时候偷一下懒,点右边的选项button,会弹出一个在modules文件中定义过了的模块,基本上包括所有的顶级目录,但是如果你没有足够的权限的话,你是取不下来那些没有权限访问的模块的。
2.2添加目录和文件
A.添加目录
我们可以使用命令行方式输入cvsadddir来添加一个目录,如果这个目录非空,需要在添加目录后逐个添加目录下的文件。
另一种方法可以添加比较大的非空目录,就是采用import更新的方式,但是这种方法会自动建立一个stickytag,不指定tag取出时无法控制删除过的文件。
如指定标记方式取出模块,则自动加带stickytag,只有建立分支或者将此次版本与原始版本合并才能进行开发修改。
如不指定标记方式取出模块,将取出模块中所有文件而无法显示哪些是己经删除的文件,这需要以版本合并的方式解决,CVS会将删除的文件做上删除标记。
B.添加文件
这个就比较简单了,相信大家都用过右上角带加号的button
,需要注意一点的是二进制文件不要弄错了。
不过如果真的不小心把本应是二进制的文件以文本方式添加了,有一种解决的办法,那就是打开命令行方式输入:
cvsadmin–kbfilename,接着update该文件,再commit就没问题了。
2.3cvswrappers文件
CVS有封装文件的特性,就是利用cvswrappers按文件名来控制所操作文件的设定。
-k用于二进制文件
–m用于不可合并的文本文件并特别指定此种文件的合并方式。
(待进一步验证)
2.4忽略文件
在模块目录下.cvsignore文件中可以定义