提交时会提示有冲突,这样需要手工编辑,这时如果用户A运行了$cvs update 之后,再编辑test.c, 会看到test.c 的内容是这样的:
#include
main()
{
int i;
<<<<<<< test.c
for(i = 0; i < 50; i++)
=======
for(i = 0; i < 10; i++)
>>>>>>> 1.5
printf("Count: %d
", i);
<<<<<<< test.c
return;
=======
printf("Over
");
>>>>>>> 1.5
}
这样需要,根据任务的不同,来手工修改,这是比较麻烦的,所以在真正的协作开发中,很少,对同一个文件给与,很多人相同的提交权限.
3.4 文件版本管理
版本管理系统,重要的莫过于对文件版本的管理,系统默认的版本升级使用的版本号是一定的.如果由于特殊需要,要自己定义出文件的版本号时,你可以用一下命令:
cvs log [-lR][-r rev][-d date][-w login][files…]
其中,参数的意义如下:
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
-d 指定时间
-w 指定登录名
使用下面的命令可以参看当前模块的版本号或指定文件的所有历史版本信息。
cvs annotate [-lR][-r rev|-D date] files
其中,参数的意义如下:
-l 不处理子目录
-R 对子目录做同样处理
-r 指定版本号
使用下面的命令可以参看指定文件(检出之后)的所有修改信息。
$cvs annotate cvstest/c/test.c
输出依次为:版本 修改人 修改时间 源代码
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00): #include
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): main()
1.1 (tang 18-Jan-00): {
1.1 (tang 18-Jan-00): int i = 0 ;
1.1 (tang 18-Jan-00):
1.1 (tang 18-Jan-00): for(i = 0; i < 20; i++)
1.1 (tang 18-Jan-00): printf("Count: %d
", i);
1.1 (tang 18-Jan-00):
1.3 (tang 18-Jan-00): printf("222222
");
1.4 (tang 18-Jan-00): printf("333333
");
1.1 (tang 18-Jan-00): }
使用下面的命令可以生成相对于一个指定主版本的分支版本:
cvs rtag –b –r rev_root rev_branch file_name
其中,参数的意义如下:
-b 指定生成一个分支版本
-r 指定该分支的主干节点版本号
rev_root 主干版本号
rev_branch 分支版本号
file_name 指定文件,使用“.”表示当前目录下所有文件
使用下面的命令可以生成一个对应版本号的分支版本,由于CVS 版本号是用数字表示的,而且在同一个模块下不同文件的版本完全可能是不同的,所以使用标识会更方便。