2 CVS RCS HOWTO 原始程式码版本控制系统

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

4.;Shell;Scripts;
下面的;scripts;是基本;CVS;命令的集合,而且是;Korn;shell;的;scripts; 。你可以把他转成;perl;或者;bash 。你可以自己修改成你想要的样子 。这些只是运用基本;CVS;命令但有些特殊的花样加在里面 。例如,;sedit;这个;script;提供了档案锁住的功能使得其他人知道有某人正在修改这个档案,当然你也可以直接使用;CVS;命令而不用这些;scripts;,这些;scripts;只是在展示;CVS;是多麽的有弹性 。;

把这些;scripts;复制到;/usr/local/bin;下,并且此目录应该在你的;PATH;环境变数中 。;

sget;[-r;revision_number];要从;CVS;获得一个唯读档案或整个唯读目录,请按;sget;
sedit;[-r;revision_number];要修改一个一个程式码时,这个;scripts;会做档案锁住的动作,因此没有别人可以登出这个档案了 。当然你可以改变这个;script;成你想要的功能;-;例如不锁住,只出现警告讯息,或者相反的,非常严谨的锁档案 。请按;sedit;
scommit;[-r;revision_number];要交出某个你修改的档案或整个目录 。;把你的改变交给;CVS 。请按;scommit;
supdate;要藉由从;CVS;得到最新的档案来update;一个档案或整个目录 。请按;supdate;
sunlock;[-r;revision_number];要把因为用;sedit;後的档案锁关掉 。这会释放档案锁(Release;File;Lock) 。请按;sunlock;
slist;要看目前正被你修改的档案列表 。做;"ls;-l;|;grep;|;...";命令,请按;slist;
sinfo;要得到一个档案的改版资讯 。;请按;sinfo;
slog;要得到一个;CVS;档案改版的历史纪录,请按;slog;
sdif;
sdif;-r;rev1;-r;rev2;要得到你的档案与;CVS;柜子里的档案不同的地方在哪里 。请按;sdif;

注意:;sdif;只有一个;"f";,因为这里已经有一个;unix;命令叫;"sdiff" 。;


sadd;要新增一个档案到;CVS;柜子里 。请按;sadd;
sdelete;要从;CVS;柜子里清掉一个档案 。请按;sdelete;
sfreeze;要冻结原始码;(freeze;codes);,这是将要发行;(release);整个原始码目录树 。请按;sfreeze;
saddtree;要新增一个目录树到;CVS; 。请按;saddtree;
例如;:;


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

cd;$HOME;;
sfreeze;REVISION_1_0;;srctree


--------------------------------------------------------------------------------
这将会冻结原始码,并贴上一个标签;REVISION_1_0;,如此一来你就可以稍後用版本名字登出整个目录树 。;

******************************************************



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

请把他存成一般文字档并改变存取权限;chmod;a rx;



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

#!/bin/ksh

#;CVS;program;sget
#;Program;to;check;out;the;file;from;CVS;read-only

cmdname=`basename;$0`

Usage()
{
print;"nUsage:;$cmdname;[-r;revision_number/symbolic_tag_name];"
print;"The;options;-r;are;optional;"
print;"For;example;-;"
print;";$cmdname;-r;1.1;foo.cpp"
print;";$cmdname;foo.cpp;"
print;";$cmdname;some_directory;"
print;"Extract;by;symbolic;revision;tag;like;-;"
print;";$cmdname;-r;REVISION_1;some_directory;"
print;";"
exit
}

#;Command;getopt;will;not;supported;in;next;major;release.;
#;Use;getopts;instead.;
while;getopts;r:;ii
do
case;$ii;in
r);FLAG1=$ii;;OARG1="$OPTARG"
?);Usage;;exit;2
esac
done
shift;`;expr;$OPTIND;-;1;`

#echo;FLAG1;=;$FLAG1;,;OARG1;=;$OARG1

if;[;$#;-lt;1;];;then
Usage
fi

bkextn=sget_bak

hme=`;echo;$HOME;|;cut;-f1;-d";";;`
if;[;"$hme";=;"";];;then
print;"nError:;$HOME;is;not;set!!n"
exit
fi

#;Check;if;file;already;exists....

推荐阅读