CVS命令说明详解文档格式.docx
《CVS命令说明详解文档格式.docx》由会员分享,可在线阅读,更多相关《CVS命令说明详解文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
CVS版本库的初始化。
cvsinit
3.一个项目的首次导入
cvsimport-m"
comments"
project_namevendor_tagrelease_tag
执行后:
会将所有源文件及目录导入到/path/to/cvsroot/project_name目录下
vender_tag:
开发商标记
release_tag:
版本发布标记
4.登录CVS服务器
$cvs login
这时候cvs会问你口令,请把你在CVS服务器上的口令敲进去。
如果没有任何错误信息,恭喜你,成功了!
成功登录后将建立一个~/.cvspass文件,保存你的口令,以后就不用输入口令了,也可以把你的口令设置到CVSROOT环境变量中。
user:
password@server#port:
5.cvs命令格式
cvs[global_opts]command[command_opts][command_args]
●Globaloptions属于左边cvs的,是全局的
●command_opts属于左边command的,是局部的
cvs--help-commands查看命令列表
cvs-Hcommand/cvs-helpcommand查看该命令的选项
注:
如果你每次使用一些命令都带同样的参数的话,可以把它们放到~/.cvsrc文件中去
update-c
diff-c
add-kb
cvs-Q
cvsglobal-optioncomandcomand-optionarguments
6.CVS的日常使用
CVS使用流程
a.checkout当本地没有workingcopy时使用
b.staus检查服务器上是否有新版本
c.update如果有,则用update同步文件
d.做你自己的修改,并保证正确
e.update看是否有人修改了你的文件
f.如果有冲突,合并冲突
g.commit提交你的修改,如果因为又有人提交修改而失败,回到e步
h.回到b步
1)导出仓库中代码到本地工作目录
cvscheckout[-ddir]module_name
module_name可以暂时理解为目录名,它会在本地但前目录下建立module_name目录,再把服务器上说有module_name目录下的文件copy到本地module_name目录下。
如果指定-d,则copy到本地dir目录。
注意:
第一次checkout后,就不要再通过cvscheckout来同步文件了,而是要进入该目录下进行具体文件的版本同步(添加,修改,删除)操作。
2)同步本地文件
cvsupdatefilename
将本地文件同步到最新的版本:
不指定文件名,cvs将同步所有子目录下的文件。
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成"
先同步后修改"
的习惯,和VirvualSourceSafe不同,CVS里没有文件锁定的概念,所有的冲突是在commit之前解决,如果你修改过程中,有其他人修改并commit到了CVS库中,CVS会通知你文件冲突。
<
filename
你文件上的内容
服务器上文件的内容
>
;
latestrevisionnumberintherepository
由你确认冲突内容的取舍。
也可以多人协商解决,修改完成后去掉文件中的冲突标志
conflict:
多人修改同一文件的同一区域这就叫冲突,它必须由人来解决,CVS不处理冲突,它只是告诉你存才冲突
3)提交本地修改后的文件到CVS库
cvscommit-m"
writesomecommentshere"
file_name
注意:
CVS的很多动作都是通过cvscommit进行最后确认并修改的,最好每次只修改一个文件。
在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。
如果不用写-m"
comments"
而直接确认`cvscommitfile_name`的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。
修改某个版本注释:
每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvsadmin-m1.3:
"
4)查看状态
cvs statusfilename
状态报告,类似这样:
File:
foo.c Status:
Up-to-date
Working revision:
1.1.1.1 '
Some Date'
Repository revision:
1.2 /home/cvsroot/cvstest/foo.c,v
Sticky Tag:
(none)
Sticky Date:
(none)
Sticky Options:
(none)
这里最重要的就是Status栏,这里总共可能有四种状态:
●Up-to-date:
表明你要到的文件是最新的
●Locally Modified:
表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.
●Needing Patch:
表明有个哥们已经修改过该文件并且已经提交了!
你的版本比仓库里的旧.
●Needs Merge:
表明你曾经修改该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交了!
5)查看修改历史和注释信息
cvslogfile_name
6)添加文件和目录
cvsaddnew_file_name
cvsadd-kbnew_file_name
cvsadddir_name
CVS一般只处理文本文件,它会扩展keyword(宏)并转换行结束符。
对于图片,Word文档等非纯文本的项目,需要使用cvsadd-kb选项,否则有可能出现文件被破坏的情况然后确认修改并注释
cvsci-m"
new_file_name
7)删除文件
将某个源文件物理删除后
cvsremovefile_name
然后确认修改并注释
cvsci-m"
很多cvs命令都有缩写形式:
commit=>
ci;
update=>
up;
checkout=>
co;
remove=>
rm;
8)删除空目录
cvsupdate–P
9)修改文件名
cvs里没有cvsmove或cvsrename,因为这两个操作是先cvsremoveold_file_name,然后cvsaddnew_file_name实现的。
10)目录结构同步
如果在你checkout后,有人添加了新的文件或目录,你需要把他们取出来
cvsupdate-d
11)放弃本地的修改(undo)
●如果修改来了本地文件,不想提交,想重新取新文件
cvsupdate-Cfilename
它会先把你的本地文件改名
建议:
大家把checkout的文件缺省为readonly,把"
cvs-r"
添加到~/.cvsrc文件中。
这样,你每次修改一个文件前,先cvseditfilename,提交后文件又变成readonly,如果你想放弃本地的修改,则cvsuneditfilename,它会undo,而且文件又变成readonly
12)恢复到旧版本
cvsupdate-j1.20-j1.15filenames
1.20时当前版本号,注意顺序不要反了,记住要commit,为了保证是前版本号,最好先lock
cvsupdate-r1.15filename,这里的-r不是版本号的意思,是给文件加了一个叫1.15的stickytag
如果不小心已经加成STICKTAG的话:
用cvsupdate-A解决
13)文件比较
cvsdiff-cfilename
cvsdiff-c-r1.8-r1.5filename
14)锁定与解锁文件
为保证串行的修改文件
cvsadmin-lfiles
cvsadmin-ufiles
15)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$的组合
16)StickyTag
tag的作用是对多个连续变化的文件做一个快照来表示某一时刻的所有不同内部版本的文件,一般是