📄 1493.html
字号:
然后确认修改并注释<br>
cvs ci -m "write some comments here" new_file_name<br>
<br>
2 删除文件<br>
------------------------------------<br>
将某个源文件物理删除后<br>
cvs remove file_name<br>
然后确认修改并注释<br>
cvs ci -m "write some comments here" file_name<br>
<br>
注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;<br>
<br>
3.修改文件名<br>
------------------------------------<br>
移动文件:文件重命名<br>
cvs里没有cvs move或cvs rename,因为这两个操作是先cvs remove old_file_name,然后cvs add new_file_name实现的。<br>
<br>
4 目录结构同步<br>
------------------------------------<br>
如果在你checkout后,有人添加了新的文件或目录,你需要把他们取出来<br>
cvs update -d<br>
<br>
5 放弃本地的修改(undo)<br>
------------------------------------<br>
如果修改来了本地文件,不想提交,想重新取新文件<br>
cvs update -C filename<br>
它会先把你的本地文件改名<br>
<br>
建议:建议大家把checkout的文件缺省为readonly,把"cvs -r"添加到~/.cvsrc文件中<br>
这样,你每次修改一个文件前,先cvs edit filename,提交后文件又变成readonly,<br>
如果你想放弃本地的修改,则cvs unedit filename,它会undo,而且文件又变成readonly<br>
<br>
<br>
6 恢复到旧版本<br>
------------------------------------<br>
cvs update -j1.20 -j1.15 filenames<br>
1.20时当前版本号,注意顺序不要反了,记住要commit,为了保证是但前版本号,最好先lock<br>
注意:cvs update -r1.15 file.name,这里的-r不是版本号的意思,是给文件加了一个叫1.15的sticky tag<br>
如果不小心已经加成STICK TAG的话:用cvs update -A 解决<br>
<br>
7 文件比较<br>
------------------------------------<br>
cvs diff -c filename<br>
cvs diff -c -r1.8 -r 1.5 filename<br>
<br>
8 锁定与解锁文件<br>
------------------------------------<br>
为保证串行的修改文件,或修改二<br>
cvs admin -l files<br>
cvs admin -u files<br>
<br>
<br>
==========================================================================<br>
如果你只是一般性的使用cvs,到此为止就足够了。一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。<br>
==========================================================================<br>
<br>
CVS宏/keyword<br>
==================================<br>
CVS缺省会对文件进行keyword(宏)替换,在文件中加入这些关键字是个良好的工作习惯<br>
$Id$ 关键字是用文件名、版本、时间、作者 及代码性质替换,如果使用-l选项取出,在Exp后<br>
面会加上登录用户的名称。除了$Id$关键字,RCS还支持下面常用的关键字:<br>
$Log$ : 你所提供的修改日志信息。<br>
$Author$ :存入该版本的作者。<br>
$Locker$ : 该版本的加锁者<br>
$State$ : 该版本的状态 Exp(试验版), Stabe(稳定版), Rel(发行版).缺省是Exp<br>
$Date$ : 该版本存入的时间,使用UTC时间格式。<br>
$Revision$ : 该版本的版本号<br>
$RCSfile$ : RCS文件名<br>
$Source$ : RCS全路径名<br>
$Name$ : 取回该版本的符号名<br>
$Header$ : 相当于$ Source $$ Revision$$Date$$Author $$State$$Locker$的组合<br>
<br>
<br>
Sticky Tag<br>
==================================<br>
tag的作用是对多个连续变化的文件做一个快照来表示某一时刻的所有不停内部版本的文件,一般是项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,需要的时候可以一次导出这些版本不一的文件.标记的另外一个非常重要的作用是生成分支和合并分支.<br>
1 cvs tag release_name module_name<br>
------------------------------------<br>
release_name要简洁而含义丰富,由字母开头,加字母,数字,下划线和连字号组成,特别是不能含“.”<br>
2 cvs checkout -r release_name module_name<br>
------------------------------------<br>
取出tag_name标志的文件<br>
3 cvs update -A<br>
------------------------------------<br>
tag标识的文件是历史文件,不能修改,这样可在本地去除这个限制,让它和当前版本合并<br>
<br>
<br>
<br>
<br>
CVS分支管理<br>
=============================<br>
CVS可以将历史划分成多个独立,并行和互不影响的分支,并去修改历史<br>
1 标定里程碑<br>
------------------------------------<br>
cvs tag release_1_0 prj_dir_name<br>
<br>
2 开始一个新的里程碑:<br>
------------------------------------<br>
cvs commit -r 2<br>
标记所有文件开始进入2.x的开发<br>
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。<br>
<br>
3 建立分支<br>
------------------------------------<br>
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_b2<br>
cvs rtag -b -r release_1_0 release_1_0_bugfixes prj_dir_name<br>
-r修饰的是release_1_0,-b 修饰的是release_1_0_bugfixes,cvs的版本号将变为4位,以后每分一次支,版本号增加2位<br>
<br>
4 分支并行开发<br>
------------------------------------<br>
一些人先在另外一个目录下导出release_1_0_bugfixes这个分支:解决1.0中的紧急问题,<br>
cvs checkout -r release_1_0_bugfixes<br>
分支是可以修改的,并自动提交到分支上去<br>
而其他人员仍旧在项目的主干分支2.x上开发<br>
<br>
5 tag分支<br>
------------------------------------<br>
在release_1_0_bugfixes上修正错误后,标记一个1.0的错误修正版本号<br>
cvs tag release_1_0_bugfixes_p1<br>
<br>
6 合并分支<br>
------------------------------------<br>
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:<br>
cvs update -j release_1_0_bugfixes<br>
<br>
7 再次合并分支<br>
------------------------------------<br>
如果又发现1.x新的bug,我在分支已经修改了,并标定了release_1_0_patch_2,我们同样希望把它合并到主干上来<br>
cvs update -j release_1_0_bugfixes_p1 -j release_1_0_bugfixes<br>
它的意思是把release_1_0_bugfixes_p1(tag)到release_1_0_bugfixes(分支)变化了的部分合并到当前文件(主干)<br>
否则用6步的方法,则以前合并的内容会重新合并<br>
注意:此时我们使用第5步的结果<br>
教训:尽早频繁的tag,但同时不能导致tag泛滥,tag在不同的分支里可以同名<br>
<br>
8 锁定分支<br>
------------------------------------<br>
cvs admin -l r_0_2 锁定r_0_2分支<br>
cvs admin -l 锁定主分支<br>
<br>
9 设置缺省分支<br>
------------------------------------<br>
cvs admin -b r_0_2 设定r_0_2为缺省分支<br>
cvs admin -b 设定主分支<br>
<br>
10 删除历史记录<br>
如果历史文件过多,或确定有几个阶段的稳定版本,我们可以删除一些历史文件,以保证cvs的性能<br>
cvs admin -o rev1:rev2 filename 删除rev1到rev2的版本,含这两个版本<br>
cvs admin -o rev1::rev2 filename 删除rev1到rev2的版本,不含这两个版本<br>
如果省略rev1,表示删除本分支rev2之前的所有版本<br>
如果省略rev2,表示删除本分支rev1之后的所有版本<br>
cvs admin -o rev filename 删除rev这个版本的文件<br>
注意:有tag的版本不能被删除,所以tag很重要,而且只能删单个文件<br>
<br>
<br>
CVS服务器的安装和配置<br>
=============================<br>
1 下载源码<br>
------------------------------------<br>
可从很多地方下载cvs,也可从官方ftp://ftp.gnu.org/gnu/cvs/下载<br>
<br>
2 安装,同很多源码安装一样<br>
------------------------------------<br>
gunzip cvs-1.10.6.tar.gz<br>
tar xvf cvs-1.10.6.tar<br>
cd cvs-1.10.6<br>
./configure<br>
make<br>
make install<br>
<br>
3 包的安装,如果找到具体操作系统的安装包,则见此操作系统的使用说明,比如linux为<br>
------------------------------------<br>
rpm -ivh cvs-1.10.8-3.i386.rpm即可<br>
<br>
4 建立Repository<br>
------------------------------------<br>
groupadd cvs(要访问cvs的用户加入此组)<br>
useradd cvsroot<br>
mkdir /home/cvsroot<br>
cvs -d /home/cvsroot init<br>
chown -R cvsroot.cvs /home/cvsroot<br>
chmod -R ug+rwx /homecvsroot<br>
<br>
5 配置/etc/services文件<br>
------------------------------------<br>
添加cvspserver,如果有就不要加了<br>
cvspserver 2401/tcp # cvs client/server operations<br>
cvspserver 2401/udp # cvs client/server operations<br>
<br>
6 配置inetd<br>
------------------------------------<br>
编辑/etc/inetd.conf,加入<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -