9.版本回退(取出以前的某个版本)
有两种方式:
一是只把某一版本的文件输出到标准输出上:
$cvs up –p –r <版本号> <filename>
“-p”选项让CVS命令的结果只输出到标准输出,而不写入到结果文件中。
另一种是将输出到标准输出的结果重定向到文件中:
$cvs up –p –r <版本号> <filename> > <filename>
如:目前abc.c文件的版本号为1.5,要取出1.2的版本,那么执行
$cvs up –p –r 1.2 abc.c > abc.c
若没有使用“-p”选项进行回退,而是使用了$cvs up –r 1.2 abc.c命令,之后若对1.2版本进行修改后再提交到CVS时,会出现如下提示信息:
cvs ci
cvs commit: Examining .
cvs commit: sticky tag `1.2' for file `abc.c' is not a branch
cvs [commit aborted]: correct above errors first!
解决办法两种方式:
I、修改CVS/Entries文件,将以下黄色标记部分删除即可。
$cd CVS
$ vi E*
/abc.c/1.2/Tue Dec 17 13:33:06 2002//T1.2
D
~
~
II、使用$cvs up –A abc.c命令来消除附着标签,但是该命令是将1.2版本与最新版本进行了合并,还需对abc.c进行修改再重新提交。
版本标签(tag)
版本标签是符号化的版本号码,具有直观、易于记忆和管理的优点。用于阶段式(里程碑)的版本标记。是连接项目中不同文件不同版本的手段。
标签的设定
[Du_cloud@linux test]$ cvs tag rel_1_0_1 test.c
给test.c打上标签rel_1_0_1
注意:很少给单个文件设标签。
给目录下所有文件贴标签:(选中目录)
[Du_cloud@linux test]$ cvs tag baseline_1
删除:
[Du_cloud@linux test]$ cvs tag –d baseline_1
重命名:
[Du_cloud@linux test]$ cvs tag –r baseline_1 baseline_2
(先重命名再进行删除原标签)
[Du_cloud@linux test]$ cvs tag –d baseline_1
移动:
[Du_cloud@linux test]$ cvs tag –r 1.6 –F baseline_1 test.c
这里我们将test.c的标签从旧版本1.5移到新版本1.6上。
§ 根据版本号码或版本标签获得
[Du_cloud@linux test]$ cvs update –r 1.1 test.c
获得某一版本标签的整个软件的源代码:
[Du_cloud@linux test]$ cvs checkout –r baseline_1 test
或者跳转到某个版本标签的版本(已经有工作拷贝的情况下)
[Du_cloud@linux test]$ cvs update –r baseline_1
§ 根据时间获得特定版本(更新到不晚于date的最新版本)
[Du_cloud@linux test]$ cvs update –D “2002-05-08”
版本分支
[Du_cloud@linux test]$ cvs co –d test_new –r base_1 test
将标签base_1 下的文件checkout到 新建目录 test_new下
[Du_cloud@linux test_new]$ cvs tag –b New_Branch,
在标签base_1下建立分支New_Branch
[Du_cloud@linux test_new]$ cvs up –r New_Branch,(可以在分支中修改程序如:test.c) (进入分支New_Branch,进入之后可以在分支上修改文件) 1.1.2 变成1.1.2.1
[Du_cloud@linux test_new]$ cvs ci –m “fixed bug no 111” test.c(提交到分支上)
[Du_cloud@linux test]$ cvs up –j base_1_brh(分支版本合并到主干版本中)
[Du_cloud@linux test]$ cvs ci –m “merged from branch:base_1_brh”
remove命令
删除文件
your_client$ cvs remove –f oldfile
your_client$ cvs commit –m “removed” oldfile
删除文件夹
因为cvs不对目录进行版本控制,所以和删除文件不同,没有一个专门的命令。例如(要删除目录olddir):
your_client$ ls -a
olddir test.c test1.c test.pc
your_client$ cd olddir
your_client$ ls –a
tmp.c tmp1.c
以下是删除目录olddir的命令:
your_client$ cvs remove –f tmp.c tmp1.c
Your_client$cvs commit –m “removed” tmp.c tmp1.c
your_client$ cd ..
your_client$ cvs update –P (更新, -P 告知 cvs update将空目录由库存中删除)
your_client$ cvs update(所有空目录均从工作目录中删除)
这时目录olddir从工作目录中消失(注意前提是将olddir中的文件全部删除)
注意:此命令不会将库中新添加的目录取到工作目录中,可执行命令:your_client$ cvs update -d