cvs用法总结(1)--cvs命令格式
读书笔记,中文名"版本控制之道-使用cvs",英文名"Pragmatic Version Control-Using CVS"。以下内容出自 英文版附录,中文内容来自中文实体书,使用范例是个人总结(总结出来,以后万一忘了可以查,呵呵)。
一. CVS Command Format/cvs命令格式 cvs <global options..> command <options and arguments. . .>
Global Options / 全局选项 - H Displays usage information for command.显示命令用法 - Q Cause CVS to be really quiet.使得cvs不输出信息 - q Cause CVS to be somewhat quiet.使得cvs较少输出信息 - r Make checked - out [1]les read - only.使得签出的文件只读 - w Make checked - out [1]les read - write ( default ).使得签出的文件可读写(默认) - l Turn history logging off.关闭历史纪录 - n Do not execute anything that will change the disk.不执行任何会修改磁盘文件的操作 - t Show trace of program execution, try with - n.实现程序执行的轨迹(试着和 - n一起使用) - v CVS version and copyright.cvs版本和版权说明 - b bindir Find RCS programs in bindir. 在 " bindir " 目录中找到rcs程序 - T tmpdir Use tmpdir for temporary [1]les. 将 " temdir " 目录作为保存临时文件的目录 - e editor Use editor for editing log information.使用 " edit " 来编辑日志信息 - d CVSROOT Overrides CVSROOT environment variable as the root of the CVS tree. 取代CVSROOT环境变量作为cvs的根目录 - f Do not use the / .cvsrc [1]le. 不使用 / .cvstc文件 - z # Use compression level # for net traf[1]c. 在网络通信中使用第 " # " 级压缩 - a Authenticate all net traf[1]c.炎症所有网络通信 - s VAR = VAL Set CVS user variable.设置CVS用户变量
使用范例: 1.察看cvs版权信息 cvs -v 2.察看cvs帮助 cvs -H 二. Flag Characters/标记字符
在更新操作期间,CVS将显示一列前面带有标志字符的文件名。下面列出了这些字符代表的意义:
A 文件 文件已经从本地添加到CVS,但是还没有存放到仓库中 C 文件 当试图更新文件时检测到了一个冲突(也就是说,在本地修改的代码和与在仓库中被修改的代码有冲突)。这个文件在本地的副本中包含冲突记号,而文件原来的版本存放在一个叫做.#文件.version的新文件中 M 文件 文件已经在工作区中被修改,需要存回到仓库以使仓库保持更新。 P 文件 作用和 " U " 相同, " P " 标志表示服务器使用了一个补丁文件将这个文件更新成最新的。 R 文件 文件已经从仓库的工作副本中移走(使用 cvs remove 命令)。当运行cvs commit命令后,这个文件在仓库中的版本才会被移走 U 文件 文件的本地副本已经按照仓库中的最新版本更新了。只有当文件在仓库中的版本比本地版本新以及有一个新文件在仓库中而没有在本地区时才会发生。 ? 文件 文件只存在于工作区中但是仓库中没有这个文件的任何信息。可以使用cvs add 命令来添加这个文件,或者通过修改.cvsignore 文件来让cvs忽略这个文件
对C标记的测试:在两个工作区中同时修改同一个版本的文件number.txt,将其中的一行修改为不同的内容,然后commit提交一个,update另一个显示: cvs update cvs server: Updating . RCS file: /export/home/cvsroot/test/aoxj/cvstest/number.txt,v retrieving revision 1.6 retrieving revision 1.7 Merging differences between 1.6 and 1.7 into number.txt rcsmerge: warning: conflicts during merge cvs server: conflicts found in number.txt C number.txt 此时使用ls -a可以看到文件.#number.txt.1.6生成 . .#number.txt.1.6 .. CVS number.txt 打开merge后的number.txt文件,内容为 1 15 2 25 3 <<<<<<< number.txt 45 ======= 46 >>>>>>> 1.7 三. CVS Environment /cvs 环境 环境变量通常和CVS一起使用. CVSROOT 用来指定仓库的默认位置以及访问方法,设置了这个变量就无需使用CVS的全局-d选项. 在windows中,可以增加CVSROOT到系统环境变量中,或者使用命令行:
c:/ > set CVSROOT = :pserver:username@hostname: / cvsrootpath
在unix/linux中,对于bash,zsh,需要添加到profile文件中
export CVSROOT = :pserver:username@hostname: / cvsrootpath
cvs用法总结(2)--cvs命令import,add,release,remove
一. login登录 cvs login 会提示要求输入密码 二. logout 退出 cvs logout 三. import 将源文件导入到cvs仓库 cvs import [-d] [-k subst] [-I ign] [-m msg] [-b branch] [-W spec] repository vendor-tag release-tags... -d 将文件的修改时间作为导入时间 -k sub 设置默认的RCS关键字替换模式 -I ign 忽略文件(使用!重置) -b bra 分支的标识 -m msg 日志信息 -W spec 包装指定行
使用范例 (1)将一个新项目导入到仓库 1.假设项目在本地文件夹testproject下,进入该目录,清除里面所有不需要提交的内容 2.执行命令 cvs import -m"test log message" -ko test/aoxj/ testprojuect test 其中test/aoxj/指在仓库中的位置,testprojuect是项目名称,test发布标识 3.可以用check 从仓库中获取这个新导入的项目 cvs co test/aoxj/testproject
(2)创建项目的另一个方法:建立一个空仓库在添加一个新项目 1.迁出仓库的顶级目录 cvs co -l -d tmp . 2.在这个迁出的工作区中建立新项目,使用add命令加入仓库 makedir newproject cvs add newproject 3.测试删除这个签出的工作区 cvs release -d tmp 4.再次签出项目 cvs co newproject
四. add 添加新文件/目录 cvs add [-k rcs-kflag] [-m message] files... -k 使用rcs-kflag添加具有指定kflag的文件,通过使用"-kb"添加二进制文件到仓库中 -m 使用message来创建日志
使用范例: (1)添加二进制文件 cvs add -kb -m"add a binary file" test.doc 如果不使用-kb,则默认是按照text格式提交,会破坏文件。 (2)忘记-kb提交二进制文件的补救 如果是进行了add但是还没有commit,则可以使用实现方法: 1.忘了加-kb cvs add test.doc 2.本地改名 mv test.doc temp.doc 3.删除文件 cvs remove test.doc 4.取回原来的文件 mv temp.doc test.doc 5.再次add并commit cvs add -kb test.doc cvs commit test.doc
如果是commit之后才发现错误,最安全的方式是修改CVS仓库中的标记,然后再更新cvs仓库.
1.错误的commit了文件 cvs add test.doc cvs commit test.doc 2.重置cvs仓库的标记 cvs admin -kb test.doc 3.重置本地工作区的标志 cvs update -A test.doc 4.从正确的文件覆盖本地工作区的文件 cp /**/test.doc test.doc 5.提交到仓库 cvs commit -m "new binary file" test.doc
五.admin 管理仓库 cvs admin rcsoptions ... -k 使用"rcs-kflag"来改变与一个文件相关的标记,常用于将文件的状态修改为二进制(使用"-kb")
六. release 删除本地模块 cvs release [-d] directories ... -d 删除给定目录的本地副本
使用范例: cvs release -d test/aoxj/testproject 这样会将本地工作区中的test/aoxj/testproject目录删除,但是不影响cvs仓库中文件
七. remove 从cvs仓库中删除条目 cvs remove [-flR] [files ...] -f 在移除之前删除文件 -l 只有本目录,不包括子目录 -R 操作应用于子目录
使用范例: (1) 从cvs仓库中删除文件 cvs remove a.txt 会报错,表示该文件在本地工作区中依然存在,需要先删除本地工作区中的文件 cvs server: file `a.txt' still in working directory cvs server: 1 file exists; remove it first 可以手工用rm命令删除,也可以使用-f参数在提交cvs remove命令前先删除文件 cvs remove -f a.txt 会出现提示 cvs server: use 'cvs commit' to remove this file permanently 表示本地副本已经被删除,要求用commit命令提交到仓库,如果这个时候使用update 明亮,会看到 R a.txt 注意a.txt前面的R.最后在用commit提交删除仓库中的文件: cvs commit a.txt (2)从cvs仓库中删除文件夹 cvs remove -fR foldername 可以删除foldername文件夹下的文件,但是无法删除目录
cvs用法总结(3)--cvs命令status,annotate,log,diff
一.status 显示文件状态 cvs status [-vlR] [ files...] -v 详尽格式,包括文件的标记信息 -l 只处理本目录,不包括子目录 -R 操作应用于子目录
使用范例: (1)察看文件标识 cvs status -v WmailInitiator.java 可以看到以下tag信息 Existing Tags: R-4-0-0-0 (revision: 1.4)
二.annotate 显示每行的版本号 cvs annotate [-lRf] [-r rev|-D date] [ files...] -l 只用在本目录,不递归到子目录 -R 以递归方式处理目录 -f 在没有发现标记或日志的情况下使用文件的最新版本 -r rev annotate file as speciafied revision/tag -D date annotate file as speciafied date
三.log 打印文件历史纪录 cvs log [-lRhtNb] [-r[ revisions]] [-d dates] [-s states] [-w[ logins]] [ files...]
-l 只有本目录,不包含子目录 -R 只打印RCS文件的名称 -h 只打印文件头部 -t 只打印文件头部和描述文字 -N 不列出标记 -b 只列出默认分支上的版本 -r[revisions] 指定要列出的版本 -d dates 指定日期 -s status 只列出带有指定状态的版本 -w[logins] 只列出由指定的logins用户签入的版本
四.diff 显示版本间的差异 cvs diff [-lNR] [ rcsdiff-options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [ files...] -l 只有本目录,不包含子目录 -R 操作应用于子目录 -D date1 比较本地工作区文件与指定日期的版本之间的差异 -D date2 比较日志date2版本与rev1/date1版本之间的差异 -N 包括新加和移走的文件的版本差异 -r rev1 比较本地工作区文件与指定版本rev1的版本之间的差异 -r rev2 比较版本rev2和rev1/date1版本之间的差异 -ifdef=arg 以ifdef格式输出文件版本差异 rcsdiff 通常选项有 -c for context diffs, -u for unified diffs, and --side-by-side.
使用范例: (1)比较当前工作区文件和cvs仓库中最新文件的差异 cvs diff contactList.jsp (2)比较当前工作区文件和指定版本的差异 cvs diff -r1.1 contactList.jsp (3)比较制定的两个版本的差异 cvs diff -r1.1 -r1.2 contactList.jsp (4)左右两列对比 cvs diff --side-by-side contactList.jsp
cvs用法总结(4)--cvs命令checkout,commit,update
一.checkout 签出 cvs checkout [-ANPRcflnps] [-r rev| -D date] [-d dir] [-j rev1] [-j rev2] [-k kopt] modules... -A 重置所有粘性标记/日期/kopts -N 如果指定了-d选项,不要使用短模块路径 -P 删除空目录 -R 操作应用于子目录 -c 显示模块数据库的内容 -f 如果没有发现标记/日期,强制与一个head版本号匹配 -l 只有本目录,不包括子目录 -n 不运行模块程序 -p 把文件签出到标准输出设备 -s 类似-c,但是包括模块状态 -r rev 按版本号或标记迁出模块(暗含-P选项:具有粘性) -D date 签出时间为date时的文件版本(暗含-P选项:具有粘性) -d dir 签出到名称为dir的目录而不是以模块名为名称的目录 -k kopt 在签出时使用RCS的kopt -k选项 -j rev merge将当前版本与指定的rev版本合并 使用范例: (1)cvs co -d bossbi aimc/bossbi 将aimc/bossbi签出到当前目录下的bossbi目录 (2)cvs co -d uab40 -r R-4-0-0-0 aimc/uabweb 将aimc/uabweb的tag=R-4-0-0-0的版本签出到uab40目录,可以用cvs status -v 来察看tag 二.commit 将文件签入到仓库中 cvs commit [-nRlf] [-m msg | -F logfile] [-r rev] files... -n 不运行模块程序 -R 操作应用于子模块 -l 只有本目录,不包括子目录 -f 强制提交文件,不应用于子目录 -F file 从file中读出日志信息 -m msg 日志信息 -r rev 提交到这个分支或主干版本 三.update 将本地文件更新为最新版本 cvs update [-APdflRp] [-k kopt] [-r rev |-D date] [-j rev] [-I ign] [-W spec] [ files...] -A 重置所有粘性标记/日期/kopts -P 删除空目录 -d 像checkout命令一样创建目录 -f 如果没有发现标记/日期,强制与一个head版本号匹配 -l 只有本目录,不包括子目录 -R 操作应用于子目录 -p 把文件签出到标准输出设备 -k kopt 使用checkout命令上的RCSkopt -k选项 -r rev 使用指定版本号/标记进行更新(具有粘性) -D date 设置进行更新的日期(具有粘性) -j rev merge将当前版本与指定的rev版本合并 -I ign 忽略文件(使用!重置) -W spec 包装指定行