电脑技术学习

CVS RCS HOWTO 原始程式码版本控制系统 (1)

dn001
作者:Al;Dev;(Alavoor;Vasudevan);alavoor@yahoo.com
译者:Cyril;Huang;cyril_huang@yahoo.com
v7.0,;20;Feb;2000;翻译日期:;5;April;2000;


--------------------------------------------------------------------------------
这份文件是一份;"实际操作的说明";,以便於能使您很快的设定;CVS/RCS;原始程式码控制系统。这份文件里也有一些将;CVS;上常用的混合命令包成可设定的;shell;scripts;。这些;scripts;为;CVS;提供了一个简单的使用者介面。这份文件的内容不仅能适用於;Linux;系统也适用於其他像;Unix;的系统,例如Solaris,;HPUX,;AIX,;SCO,;Sinix,;BSD,;SCO;等等。;
--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

1.;简介
原始码控制系统是一个必须能管理那些在软体计划发展时原始码所做的改变。软体开发者需要一个完整的原始码改变历史纪录,以便於在发生问题时,能够追溯到以前稳定的版本。既然原始程式码对於任何的软体计划与开发,都是花时间与金钱中最关键的部分,所以花时间藉由使用原始码控制系统像;CVS;和;RCS;来安全的保护(safe-guarding)原始程式码是非常重要的。;

CVS;(Concurrent;Version;Control;System);是一个能让很多程式开发者同时做软体开发的非常强大工具。它使用了RCS;的档案规定格式但多了一层像应用程式介面的包装,架在;RCS;的上层。;

(译注:;RCS;是较老的版本控制,一个受;RCS;管制的档案看起来是这样子的;proj1.c,v;,CVS;沿用了一些;RCS;的规定。);

CVS;能够纪录你的档案的历史纪录(;通常是原始程式码,但是其他型态的档案则不一定)。;CVS;只存了不同版本中档案的差异,而不是你所建立的每个版本中的每个档案。;CVS;也保持了一个何时,何人更改档案,为什麽更改档案等等不同观点的历史纪录。;

CVS;对於软体的发行和多人同时更改目前原始码的管理是非常的有帮助。他并不只是要对单一目录下的档案提供版本控制,相反的,CVS;更提供了多层有组织的目录档案的版本控制。在这个目录下除了你的原始程式码外,还包含有一个;CVS;所建立的改版控制目录与档案。;

这些目录与档案最後被合并在一起形成一个软体的发行。;

CVS;能被使用在;"C",;"C++",;Java,;Perl,;HTML;和其他档案。;



--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

2.;那一种版本控制系统适合我?;CVS;或;RCS
CVS;实际上是架在;RCS;之上的,;CVS;只是一堆更强大能控制一个有完整原始程式码阶层目录的工具。我们非常强烈的推荐您使用;CVS,因为您能够很有弹性的用;perl;,;korn;bash;shell;等;scripts;语言设定您自己的;CVS;系统。请看一些;korn;shell;scripts;的□例;Shell;Scripts;。;

CVS;的优点;

CVS;是非集中式的管理,使用者从储存柜;(repository);登出一个档案目录,并且有他自己的独立的稳定目录树。;
CVS;能够在发行整个计划的原始目录树中"盖上印记";("STAMP")。;
CVS;能够使大家同时修改档案。;
CVS;能够用;shell;scripts;或;perl;设定成档案锁住成单一使用或同时修改档案模式。;
CVS;的缺点;

需要比;RCS;多一点的管理。;
非常成熟复杂的系统,是目前应用上已有的最高技术。(感谢网友tsaipaw@mars.seed.net.tw来信指证我的错误);
有丰富的命令还有命令选项,因此对於初学者来说有很陡的学习曲线。简单使用的;shell;scripts;可在这里找到;Shell;Scripts;。;
RCS;的优点;

RCS;非常容易设定。较少一些管理上的工作。;
RCS;用在一个每个人在一起工作的集中区域。;
RCS;对於简单的系统很有用。;
非常严谨的单一档案修改模式;-;同步与同时是不允许的。;
RCS;的缺失;

由於使用单一目录控制与档案锁住,不可能由很多的程式设计者做同时的开发。因为单一目录下很多人对档案的改变,会造成;make;的使用错误。;
不能对整个软体计划戳上发行(releases)的印记。;
这份文件也包含一些;shell;scripts;以提供简单的命令来作登出;(check-out),;登录;(check-in),;送交(commit);档案的动作。请看一些;shell;scripts;的□例;Shell;Scripts;。;

对於;RCS;而言,请看;Linux;CD-ROM;里面的RCS;mini-howto。;


--------------------------------------------------------------------------------

cd;/mnt/cdrom/Redhat/RPMS
ls;-l;howto-6.0-*.noarch.rpm
rpm;-qpl;howto-6*;|;grep;-i;rcs;


--------------------------------------------------------------------------------
或者看;http://sunsite.unc.edu/LDP/HOWTO/mini/RCS-HOWTO.html
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

3.;设定;CVS;
首先,你需要安装;CVS;套件,在Redhat;Linux;上请用;


--------------------------------------------------------------------------------

cd;/mnt/cdrom/Redhat/RPMS
rpm;-i;rcs*.rpm
rpm;-i;cvs*.rpm
To;see;the;list;of;files;installed;do;-
rpm;-qpl;cvs*.rpm;|;less


--------------------------------------------------------------------------------
然後用;j,;k,;CTRL+f,;CTRL+D,;CTRL+B,;CTRL+U;或上下左右键,;page;up/down;浏览一下结果。请用;'man;less';查看;less;的用法;
在其他的;unix;机器上,你可能需要下载;RCS;CVS;的;tar.gz;档案,然後根据;README,;INSTALL;档的指示来安装;CVS。请到;http://www.cyclic.com;和;http://www.loria.fr/~molli/cvs-index.html

3.1;CVS;的专有环境变数;
下列的环境变数需要在;/etc/profile;档中设定,/etc/profile;是对所有使用者都有效的内定值设定档,如果没有设定;/etc/profile,那麽你应该加这些设定到你自己的设定档;;/.bash_profile;内。;


--------------------------------------------------------------------------------

export;EDITOR=/bin/vi
export;CVSROOT=/home/cvsroot
export;CVSREAD=yes


--------------------------------------------------------------------------------

建造一个目录来存你原始程式码的储藏柜;(repository);并且给予;unix;group;与;user;读写的权力。;(译注:这个目录下将会有很多你将来的原始码。);


--------------------------------------------------------------------------------

export;CVSROOT=/home/cvsroot
mkdir;$CVSROOT
chmod;o-rwx;$CVSROOT
chmod;ug+rwx;$CVSROOT


--------------------------------------------------------------------------------
要初始化你的;CVS;,并且从现在开始把你的原始程式码交给;CVS;管理。请做;-;
--------------------------------------------------------------------------------

cvs;init

(译注;这个初始化的动作在於建造一个储藏柜,是一个目录$CVSROOT/。
同时;$CVSROOT/CVSROOT;也在此时被建造,这个模组目录下面是控制你CVS的administration;files,
里面的档案做一些修改後,可以使CVS更强大好用。
$CVSROOT;下的目录每个都是;module;的意思,一个;module;可以就是一个专案计划。
但也可能是你把一个计划拆成很多;module;,不同;module;交给不同的;team;去发展。)

#;一定要换到想要;CVS;控制的计划目录下喔
cd;$HOME/my_source_code_dir

#;把整个目录纳入管理用;import;命令
cvs;import;my_source_code_dir;V1_0;R1_0

(译注:其实是;cd;到你的project下後,cvs;import;模组;vendor_tag;release_tag,
不一定要是目录名称;my_source_code_dir,vendor_tag,;release_tag;只是识别用的东西,
将来你可以用;tag;来存取你要的特定版本
这个动作会在 $CVSROOT/ 下开个";模组;"的目录,然後把;my_source_code_dir;整个放到;CVS;下管理,
$HOME/my_source_code_dir;就没用了。import;的动作是把已经写好的一堆;code;摆进来,
如果将来想新增档案xxxx.c,必须先写好xxxx.c,再用;cvs;add;xxxx.c)


--------------------------------------------------------------------------------

3.2;从;RCS;转换到;CVS;系统;
要转换已经存在的;RCS;档案到;CVS;,请使用下面的;script;。并确定你从你的;Linux;CD-ROM;安装了;korn;shell;套件;pdksh*.rpm。;


注意;:;Korn;shell;/bin/ksh;在你从Linux;CD-ROM;安装;pdksh*.rpm;时就会产生;


--------------------------------------------------------------------------------

#!/bin/ksh

#############################################################
#;Program;to;Migrate;the;existing;source;code;in;RCS;to;CVS;
#
#;Needs;the;korn;shell;RPM;package;;pdksh*.rpm;from;Linux;
#;contrib;cdrom
#############################################################

#
#;rcs2cvs;-;convert;source;tree;from;RCS;to;CVS
#

#;project;to;convert
PROJECT='project'

#;current;RCS;root
RCSROOT="$HOME/rcs"

if;cd;"$RCSROOT/$PROJECT"
then
cd;"$RCSROOT"
else
echo;>&2;"`basename;"$0"`:;can't;change;to;RCS;directory;'$RCSROOT/$PROJECT'."
exit;1
fi

#;current;CVS;root
CVSROOT="$HOME/cvs"

#;create;new;CVS;directory;for;project;'project'
if;mkdir;"$CVSROOT/$PROJECT"
then
:
else
echo;>&2;"`basename;"$0"`:;can't;create;CVS;directory;'$CVSROOT/$PROJECT'."
exit;2
fi

#;create;CVS;project;tree;from;RCS;tree
find;"$PROJECT";-type;d;-name;RCS;-print;|
while;read;RCS
do
CVS="`dirname;"$RCS"`"
(if;cd;"$RCS"
then
#;;;;;;;if;find;.;-type;f;-name;'*,v';-print;|;cpio;-pdmv;"$CVSROOT/$CVS"
if;find;.;-type;f;-print;|;cpio;-pdmv;"$CVSROOT/$CVS"
then
:
else
echo;>&2;"`basename;"$0"`:;can't;convert;RCS;subdirectory;'$RCSROOT/$RCS';to;CVS;subdirectory;'$CVSROOT/$CVS'."
fi
else
echo;>&2;"`basename;"$0"`:;can't;change;to;RCS;subdirectory;'$RCSROOT/$RCS'."
fi)
done


--------------------------------------------------------------------------------
现在;RCS;已经被改成;CVS;系统下的;'project'.;你可以开始用CVS命令来存取;'project';这个模组了.;
--------------------------------------------------------------------------------

标签: