您的位置:软件测试 > 开源软件测试 > 开源配置管理工具 > cvs
使用CVS进行项目开发管理
作者:网络转载 发布时间:[ 2013/2/17 16:40:52 ] 推荐标签:

  在多人共同开发一个大型项目时,源代码的维护和版本维护是一件令人头疼的事情,由于多人开发,每个开发人员都拥有此项目的副本,所以如果要手动维护同一个文件多人的修改是十分困难的事情。
  另外,可能你需要的项目的版本不是当前开发的新的版本, 如果为了这个目的而为每一个版本保留一个备份几乎是不可能的。Linux平台上提供了一个功能软件:CVS。众所周知,Linux的发展得益于互联网的发展,大部分的软件都是众多开发者在互联网上共同开发的,这些软件的维护大部分都使用CVS,例如Deban Linux的开发、KDE的开发,以及sourceforg上的开发项目。正确熟练使用CVS是一个Linux程序员基本的素质。
  
  CVS不仅可以维护源代码,事实上,所有的文本文件都可以使用CVS来管理,当然也可以管理 二进制文件,只是需要特殊的命令选项罢了。
  
  CVS把文件保存在一个名叫仓库(repository)的地方,仓库中保存的文件并不是每个版本的副本,而是可以从任意版本回溯到初始版本的一些代码的主控信息,这样,节省了大量的存储空间。
  仓库不仅可以建立在本机上,也可以建立在网络上。另外CVS支持版本分支(tag),这样可以从任意的版本中衍生出另外一个版本进行开发,必要时,还可以把这个分支合并到主开发分支去。
  
  CVS需要一个名叫RCS(修订控制系统)的软件,确切说,CVS主要管理开发项目中的目录的改动,而RCS则侧重于管理的一个文件的改变。如果要使用网络的CVS,还需要rsh或者自己内置的cvs-server,rsh是CVS客户于服务器的通信平台,如果需要安全的信息传输,可以使用ssh,这个可以使用CVS_RSH环境变量来指定:
  export CVS_RSH=rsh 使用rsh
  export CVS_RSH=ssh 使用ssh
  
  RCS使用
  在使用CVS之前,先介绍一下RCS的使用方法。
  正如前面所说,RCS是针对某一个特定的文件进行管理,常用到的命令是co和ci。RCS使用当 前工作路径下的RCS目录来存储管理的文件。
  ci (check in)把源代码加入到RCS源代码仓库中,每一个添加进代码库中的文件的版本是 1.1。
  以后每次修改文件重新ci以后,此文件的版本递增为1.2 ,1.3.……。
  co(check out)把源文件从RCS源代码仓库中取出,缺省的版本是新的版本,如果你需要一个指定的版本,则需要使用-r选项指定。例如:
  $mkdir RCS 建立RCS源代码仓库
  编辑一个文件,如hello.c
  #include <stdio.h>
  int main (void)
  {
  printf ("Hello World ");
  return 0;
  }
  然后把它加入到RCS仓库中:
  [kerberos@power zhyf]$ ci hello.c
  RCS/hello.c,v <-- hello.c
  enter description, terminated with single '.' or end of file:
  NOTE: This is NOT the log message!
  >>the inital verion. 输入关于文件改动的信息
  >> . 以.结束信息输入
  initial revision: 1.1 初始版本是1.1
  done
  [kerberos@power zhyf]$
  当文件加入到源代码仓库后,RCS会自动删除文件。
  
  如果需要修改文件,则从仓库取出:
  [kerberos@power zhyf]$ co hello.c
  RCS/hello.c,v --> hello.c
  revision 1.1
  done
  此时,取出的文件是只读的,如果需要编辑文件,需要对文件加锁取出,防止与他人编辑冲突。 
  加锁取出使用-l (lock)选项。
  [kerberos@power zhyf]$ co -l hello.c
  RCS/hello.c,v --> hello.c 从RCS仓库中取出hello.c,仓库中的文件是以v结尾的。
  revision 1.1 (locked) 指明是加锁取出
  done
  这时,我们可以修改和编辑文件了。
  例如:
  #include <stdio.h>
  int main (void)
  {
  printf ("Hello World ");
  printf("checkoutwithlock "); 添入代码
  return 0;
  }
  [kerberos@power zhyf]$ ci hello.c
  RCS/hello.c,v <-- hello.c
  new revision: 1.2; previous revision: 1.1 重新加入到仓库,文件版本递增为1.2
  enter log message, terminated with single '.' or end of file:
  >> check out with lock and modified it .
  >> .
  done
  如果你需要先前的hello.c,也是1.1版本的,可以使用-r来指定取出文件的版本:
  [kerberos@power zhyf]$ co -l -r1.1 hello.c
  hello.c,v --> hello.c
  revision 1.1 (locked) 取出1.1版本
  done
  可以尝试使用两次加锁取出,这时候,RCS会提示警告信息。
  [kerberos@power zhyf]$ co -l hello.c
  hello.c,v --> hello.c
  revision 1.1 (locked)
  writable hello.c exists; remove it? [ny](n) 是否覆盖当前的hello.c
  如果回答n,则取出失败,回答是则覆盖当前文件与-l相反的选项是-u,取出不加锁的文件用于工作。-f则在ci时强制覆盖RCS仓库中的文件,在co时强制覆盖当前的文件。 
  
  在RCS中,支持类似于宏的关键字,在ci后,这些关键字会被RCS替换成特定的信息,如$Id$关键字:
  /*$Id
  */
  #include <stdio.h>
  int main (void)
  {
  printf ("Hello World ");
  printf("checkoutwithlock ");
  return 0;
  }
  ci 之后,然后取出,文件将变成:
  /*$Id: hello.c,v 1.3 2001/02/22 16:16:58 kerberos Exp kerberos $
  */
  #include <stdio.h>
  int main (void)
  {
  printf ("Hello World ");
  printf ("check out with lock ");
  return 0;
  }
  $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$的组合在UNIX/Linux下有一个diff工具可以比较两个文件的不同,rcsdiff可以在不同的版本之间比较文件的不同,而不必取出文件,如:
  rcsdiff hello.c 比较当前hello.c文件与RCS仓库中新版本的区别。
  rcsdiff -r1.1 hello.c 比较当前hello.c文件与hello.c的1.1版本的区别。
  rcsdiff -r1.2 -r1.1 比较hello.c 文件的1.1版本和1.2版本的区别。
  使用这个命令,可以很方便的做出任意版本之间的补丁文件。
  另外,还有其他一些不常用的RCS命令,读者可以参考更详细的资料。

上一页123下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd