QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1016|回复: 0

CVS简明使用手册

[复制链接]
发表于 2006-1-12 12:15:59 | 显示全部楼层 |阅读模式
CVS简明使用手册

1.        CVS环境初始化

环境设置:指定CVS库的路径CVSROOT
export CVSROOT=:pserver:[email protected]:/home/cvsroot
其中的username视你的用户名而更换
使用CVSROOT环境变量登陆cvs:
cvs login
或者用-d指定,将会覆盖CVSROOT的设定:
cvs –d “:pserver:[email protected]:/home/cvsroot”  login
退出:
cvs logout
或者
cvs –d “:pserver:[email protected]:/home/cvsroot”  logout

2.        项目的导入与导出

一个项目的首次导入
cvs import -m "comments" project_name vendor_tag release_tag
执行后:会将所有源文件及目录导入到/home/cvsroot/project_name目录下
vender_tag: 开发商标记(其实这是一个标记tag)
release_tag: 版本发布标记(其实这是一个分支branch)
项目导出:将代码从CVS库里导出
cvs checkout project_name
cvs 将创建project_name目录,并将最新版本的源代码导出到相应目录中。
注意:项目第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。
常用命令有checkout、commit、status、update、remove等,分别对应缩写co、ci、st、up、rm

3.        查看状态

下面的命令用于查看文件的状态,不带文件名则为查看当前目录下所有文件的状态
cvs status file_name

可能的状态有:
Up-to-date        :最新版,本地与服务器一致
Locally Modified:本地已修改,可提交
Needs Patch        :服务器已修改,需更新
Needs Merge        :本地与服务器均有修改,需合并

4.        将文件同步到最新的版本

cvs update
不指定文件名,cvs将同步所有子目录下的文件,也可以指定某个文件名/目录进行同步
cvs update file_name
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成“先同步 后修改”的习惯,如果你修改过程中,有其他人修改并commit到了CVS 库中,CVS会通知你文件冲突,并自动将冲突部分用
<<<<<<
content in your file
======
content on cvs server
>>>>>>
标记出来,由你确认冲突内容的取舍。
版本冲突一般是在多个人修改一个文件造成的,但这种项目管理上的问题不应该指望由CVS来解决。

5.        提交你的修改

cvs commit -m "write some comments here" file_name
注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认之前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器要求你写入注释。
注释的质量很重要,所以不仅必须要写,而且必须写一些比较有意义的内容,以方便其他开发人员能够很好的理解
不好的注释,很难让其他的开发人员快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注释,甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"
修改某个版本注释:每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvs admin -m 1.3:"comments" file_name
6.        添加/删除文件和目录

创建好新文件后,执行
cvs add new_file
此时仅仅是把该文件列入计划,然后必须提交:
cvs ci –m “add new_file” new_file
注意:对于图片,Word文档等非纯文本的项目,需要使用cvs add -kb选项按2进制文件方式导入(k表示扩展选项,b表示binary),否则有可能出现文件被破坏的情况
比如:
cvs add -kb new_file.gif
cvs add -kb readme.doc

将某个源文件物理删除后,比如:rm file_name
cvs rm file_name
然后确认修改并注释
cvs ci -m "write some comments here" file_name
以上面前2步合并的方法为:
cvs rm -f file_name
cvs ci -m "why delete file" file_name

cvs里没有cvs move或cvs rename,因为这两个操作是可以由先cvs remove old_file_name,然后cvs add new_file_name实现的。

创建好目录后,执行
cvs add dir_name
即可添加目录

CVS中删除目录必须先删除目录中的文件,然后用cvs up –P通知服务器删除空目录
移动目录则必须
1.创建目录
2.创建目录中的文件
  在本地把文件移动到新目录中,然后参照添加文件的方法在服务器中添加文件
3.删除旧目录中的文件,然后用cvs up –P通知服务器删除空目录
目录重名名按照移动目录的方法进行操作。

7.        查看修改历史

cvs log file_name
cvs history file_name

8.        查看当前文件不同版本的区别

cvs diff -r1.3 -r1.5 file_name
查看当前文件(可能已经修改了)和库中相应文件的区别
cvs diff file_name

9.        通过CVS恢复旧版本

正确的恢复版本的方法是:cvs update -p -r1.2 file_name>file_name

10.        导出不带CVS目录的源文件

做开发的时候你可能注意到了,每个开发目录下,CVS都创建了一个CVS/目录。里面有文件用于记录当前目录和CVS库之间的对应信息。但项目发布的时候你一般不希望把文件目录还带着含有CVS信息的CVS目录吧,这个一次性的导出过程使用cvs export命令,不过export只能针对一个TAG或者日期导出,比如:
cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name

11.        打标记

多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑标记,方便以后按照这个阶段里程碑标记导出项目,同时也是项目的多个分支开发的基础。
cvs tag release_1_0

12.        开始一个新的里程碑

cvs commit -r 2 标记所有文件开始进入2.x的开发
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。

13.        版本分支的建立

在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支 release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch project_name
一些人先在另外一个目录下导出release_1_0_patch这个分支,解决1.0中的紧急问题
cvs checkout -r release_1_0_patch
而其他人员仍旧在项目的主干分支2.x上开发
在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_patch_1
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_patch_1

14.        使用锁

默认方式下,CVS允许多个用户编辑同一个文件,这对一个协作良好的团队来说不会有什么问题,因为多个开发者同时修改同一个文件的同一部分是不正常的,这在项目管理中就应该避免,出现这种情况说明项目组内部没有统一意见。而多个开发者修改文件的不同部分,CVS可以很好的管理。
对于文本格式,CVS可以进行历史记录比较、版本合并等工作,而二进制文件不支持这个操作。对于二进制方式,由于无法进行合并,在无法保证只有一个用户修改文件的情况下,建议使用加锁方式进行修改。或者你认为你的修改很重要,需要其它开发者暂停提交,也可以使用锁
cvs admin -l file_name
锁定后其他用户就无法提交。当修改完毕提交后,锁将会自动解除。如果未修改而需要解锁,执行
cvs admin -u file_name
即可解除。锁无法由别的用户来解,所以锁定文件的开发者必须记得提交或解锁。

15.        关键字扩展

CVS提供许多关键字扩展的功能,当你提交时,CVS自动把关键字进行扩展,并填入你的源文件。常见的关键字有
$Author$
$Date$
$Header$
$Id$
$Locker$
$Name$
$RCSfile$
$Revision$
$Source$
$State$
$Log$
其中比较有用的有$Log$,添加这个标记之后,每次提交的版本、时间、开发者及注释等信息都被自动记录到源文件中,而$Id$这个标记则自动更新当前的版本号、更新时间和更新者等信息。

建议的使用流程:
1.登陆CVS(login)
2.首次使用则需要checkout,之后每次工作之前先查询状态(status),有需要更新则update
3.如果需要,上锁
4.修改程序
5.再次查询状态
6.根据状态,对比二者的差异(diff),进行合并
7.提交修改
8.如果放弃修改,恢复到旧版本并解锁
9.每过一段时间查询服务器状态,及时更新到最新版
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:23 , Processed in 0.034055 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表