7 文件比较
------------------------------------
cvs diff -c filename
cvs diff -c -r1.8 -r 1.5 filename
8 锁定与解锁文件
------------------------------------
为保证串行的修改文件,或修改二
cvs admin -l files
cvs admin -u files
==========================================================================
如果你只是一般性的使用cvs,到此为止足够了。一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。
==========================================================================
CVS宏/keyword
==================================
CVS缺省会对文件进行keyword(宏)替换,在文件中加入这些关键字是个良好的工作习惯
$Id$ 关键字是用文件名、版本、时间、作者 及代码性质替换,如果使用-l选项取出,在Exp后
面会加上登录用户的名称。除了$Id$关键字,RCS还支持下面常用的关键字:
$Log$ : 你所提供的修改日志信息。
$Author$ :存入该版本的作者。
$Locker$ : 该版本的加锁者
$State$ : 该版本的状态 Exp(试验版), Stabe(稳定版), Rel(发行版).缺省是Exp
$Date$ : 该版本存入的时间,使用UTC时间格式。
$Revision$ : 该版本的版本号
$RCSfile$ : RCS文件名
$Source$ : RCS全路径名
$Name$ : 取回该版本的符号名
$Header$ : 相当于$ Source $$ Revision$$Date$$Author $$State$$Locker$的组合
Sticky Tag
==================================
tag的作用是对多个连续变化的文件做一个快照来表示某一时刻的所有不停内部版本的文件,一般是项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,需要的时候可以一次导出这些版本不一的文件.标记的另外一个非常重要的作用是生成分支和合并分支.
1 cvs tag release_name module_name
------------------------------------
release_name要简洁而含义丰富,由字母开头,加字母,数字,下划线和连字号组成,特别是不能含“.”
2 cvs checkout -r release_name module_name
------------------------------------
取出tag_name标志的文件
3 cvs update -A
------------------------------------
tag标识的文件是历史文件,不能修改,这样可在本地去除这个限制,让它和当前版本合并
CVS分支管理
=============================
CVS可以将历史划分成多个独立,并行和互不影响的分支,并去修改历史
1 标定里程碑
------------------------------------
cvs tag release_1_0 prj_dir_name
2 开始一个新的里程碑:
------------------------------------
cvs commit -r 2
标记所有文件开始进入2.x的开发
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。
3 建立分支
------------------------------------
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_b2
cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name
-r修饰的是release_1_0,-b 修饰的是release_1_0_bugfixes,cvs的版本号将变为4位,以后每分一次支,版本号增加2位
4 分支并行开发
------------------------------------
一些人先在另外一个目录下导出release_1_0_bugfixes这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0_bugfixes
分支是可以修改的,并自动提交到分支上去
而其他人员仍旧在项目的主干分支2.x上开发
5 tag分支
------------------------------------
在release_1_0_bugfixes上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_bugfixes_p1
6 合并分支
------------------------------------
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_bugfixes
7 再次合并分支
------------------------------------
如果又发现1.x新的bug,我在分支已经修改了,并标定了release_1_0_patch_2,我们同样希望把它合并到主干上来
cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes
它的意思是把release_1_0_bugfixes_p1(tag)到release_1_0_bugfixes(分支)变化了的部分合并到当前文件(主干)
否则用6步的方法,则以前合并的内容会重新合并
注意:此时我们使用第5步的结果
教训:尽早频繁的tag,但同时不能导致tag泛滥,tag在不同的分支里可以同名
8 锁定分支
------------------------------------
cvs admin -l r_0_2 锁定r_0_2分支
cvs admin -l 锁定主分支
9 设置缺省分支
------------------------------------
cvs admin -b r_0_2 设定r_0_2为缺省分支
cvs admin -b 设定主分支