LINUX上配置CVS服务器之三

分类: Linux服务器   出处:iocblog整理  更新时间:2009-06-30   添加到收藏  


  3.在管理中的相关技术
  
  3.1 在管理源文件的一种技术叫"关键字替换".在每次执行"cvs commit"操作后源文件的某些关键字会被替换为可用的词
  
  $author$ 用户名
  
  $data$ 登记时的时间
  
  $header$ 标准的首部,包含rcs的完整路径名,日期,作者
  
  $id$ 除rcs文件名不完整外与$header$同.
  
  $log$ 包含rcs的完整路径名,版本号,日期,作者和在提交时提供的日志信息.
  
  $rcsfile$ 包含rcs的文件名,不包括路径名
  
  $revision$ 分配的版本号
  
  $source$ rcs文件的完整名
  
  $state$ 分配的版本的状态,由 cvs admin -s 分配.
  
  例: 在cvs commit之前,main.c里有
  
  static char *rcsid="$id$";
  
  执行cvs commit后
  
  main.c的改行变为:
  
  static char *rcsid="$id: main.c,v 1.2 1999/04/29 15:10:14 trimblef exp$";
  
  当然,这里只是一个演示.在实际的程序开发中,这种技术有非常有用的作用,在此不多赘述.有兴趣的朋友可参考相关书籍.
  
  3.2 创建分支可以使用户对一些文件使用命令commit进行修改时不会影响主干. 创建分支应首先为拟作修改的那些文件创建一个标签(tag).
  
  标签是赋于一个文件或一组文件的符号.在源代码的生命周期里,组成一组模块的文件被赋于相同的标签.在工作目录中执行
  
  ~usr/teat/$cvs tag release-1-0
  
  标签创建后, 就可以为其创建一个分支:
  
  ~usr/teat/$cvs rtag -b -r release-1-0 release-1-0-path print
  
  -b :创建分支
  
  -r release-1-0 :指定存在的标签
  
  releas-1-0-patch:分支
  
  print: 模块名
  
  使用cvs update -j 选项可以将分支上的改变与本地文件拷贝合并.
  
  ~usr/teat/$cvs update -j release-1-0 print.c
  
  对源文件作必要修改后, 可以用cvs release 删除本地工作拷贝
  
  并通知其他开发者这个模块不再使用.
  
  ~use/$cvs release -d test
  
  3.3 冲突解决
  
  在有多个用户对同一个文件进行修改时,如果修改了其中的相同部分,而修改后的内容如果有不同的话,出现冲突是不可避免的。
  
  例如在cvs 文件仓库中有一个文件 test.c ,它的版本是 1.4, 用户a 先检出该文件进行修改,而稍后有用户b 检出该文件进行修改,并提前提交成 1.5,这样在用户a再提交时就会出现冲突,这时cvs会提示需要手工解决。
  
  例如,文件仓库中的版本1.4:内容为:
  
  #include
  
  main()
  
  {
  (来源 www.iocblog.net)
  int i;
  
  for(i = 0; i < 100; i++)
  
  printf(“count: %d
  ”, i);
  
  }
  
  用户b 1.5:
  
  #include
  
  main()
  
  {
  
  int i;
  
  for(i = 0; i < 10; i++)
  
  printf(“count: %d
  ”, i);
  
  printf(“over
  ”);
  
  }
  
  用户a :
  
  #include
  
  main()
  
  {
  
  int i;
  
  for(i = 0; i < 50; i++)
  
  printf(“count: %d
  ”, i);
  
  return;
  
  }
  
  提交时会提示有冲突,这样需要手工编辑,这时如果用户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
  
  }
  
  这样就需要,根据任务的不同,来手工修改,这是比较麻烦的,所以在真正的协作开发中,很少,对同一个文件给与,很多人相同的提交权限.(来源 www.iocblog.net)

 

[1] [2] 下一页


Tag: CVS



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。