您的位置:软件测试 > 开源软件测试 > 开源配置管理工具 > cvs
用CVS来管理自己的程序
作者:网络转载 发布时间:[ 2013/2/17 16:10:58 ] 推荐标签:

  每个编写程序的人也许都有过这样的体验:对编写的程序作了一些修改,几天以后,我们可能发现上次的修改导致了其它的矛盾,甚至编译不能通过,但这时我们却很难找到自己刚在哪里作了改动。一般说来,我们总是希望自己完整的记录下一个程序开发的过程,记录下这个程序的每一点改进和调整。或许我们可以用备份的方法来解决这个问题,于是我们建立一个backup的目录,定期或不定期的将自己的源程序打包放进去,直到某整个硬盘都被这些文件撑满。这当然有些夸张,但这种机制带给我们的不方便是显而易见的。更进一步,现在一个软件产品的开发,一个人单枪匹马很难完成。可能是包含几个、几十个乃至上百个程序员协作开发,这时的源代码又该如何管理?解决问题的方法是使用CVS。   CVS - Concurrent Versions System(并发版本管理系统)是一个版本控制管理系统,它是目前为广泛使用的一个系统。从gftp到gtk到KDE,你几乎可以在每一个你熟悉的自由软件的源码里看到它的踪迹(下面我们会知道,它的踪迹指一个称为cvs的子目录)。同样,你也可以在几乎每一个Linux的发行版本里看到CVS系统。可以说,如果失去了CVS,现有的许多多人协作、自由开发的软件都会在一定程度上放慢自己发展的步伐。   CVS到底有哪些功能,使得它有如此强大的魅力呢?
  
  1.CVS能做什么?
  如上所说,CVS首先是一个版本管理系统,它可以保留软件开发过程中的每一个版本的信息,包括谁、在何时、作了什么样的修改以及为什么作这样的修改等。这个功能和以前流行于Linux和Unix的版本管理系统RCS(Revision Control System)和SCCS(Source Code Control System)很象。但CVS的功能远非仅此。它的大的特点是它的并发性,即它支持分布式项目的开发。在互联网席卷一切的,这个功能太为重要了。小到一个办公室内部开发一个OA系统,大到KDE小组利用互联网开发新版本的KDE,CVS都可以一展身手。一个程序员开发出了自己负责模块的新版本后,迅速的通过CVS让开发组的每一个成员都分享自己的新成果。甚至,CVS通过特定的机制允许多个程序员同时修改同一个源程序文件。   另外CVS增强的目录结构以及对二进制文件良好的处理,都使得它远远优于其它的版本管理系统。后,必须一提的是CVS是基于RCS开发而成的。
  
  2.如何得到CVS?
  CVS在几乎包含在所有的Linux发布版本中,如RedHat、Turbo Linux、Slackware以及国产的红旗、Xteam Linux等。你可以试着敲一下cvs命令,大多数情况下都会出现以Usage: cvs开头的一堆信息,提示你如何使用cvs,这意味着在你的机器上早已有了CVS,只是遗憾的是它一直未被你发现和利用。运气不好的话,你会看到形如cvs: Command not found.的提示,这意味着你的机器没有安装CVS。这时你有两种选择。一是找到你的Linux安装盘,从那里安装CVS。例如在使用RPM方式安装的Linux(上面介绍的几个发布版本中似乎除了Slackware,其他都是)发布版本中,找到cvs***.rpm,用rpm命令进行安装。第二种方式是到一些站点cvs的源代码,然后遵循里面附带的指导进行安装,需要的读者请访问站点http://www.cyclic.com/或者http://www.loria.fr/~molli/cvs-index.html。
  
  3.CVS的基本使用方法
  在这一节里,我们来学习掌握CVS的一些基本使用方法。现在我们假定已经安装好了CVS,并且我们打算用它来管理自己正在开发的一个软件,软件名叫netants,它存放在硬盘上一个叫做netants的目录里,目前里面有了文件netants.c、netants.h、http.c、http.h和Makefile。我们并没有和它人协作开发这个软件,也没有利用Internet或者Intranet来开发这个软件。或许,它只是自己的一个业余作品,试图写出一个比Windows下的网络蚂蚁更好的下载工具出来。
  
  3.1 初始化CVS
  
  我们首先要使用的命令是cvs init,这个命令用来初始化CVS系统。正如我们所看到的,所有的CVS命令都以cvs开头,然后在后面紧跟命令、参数和一些选项。初始化CVS系统主要是为了创建一个为CVS所使用的源码储存库(repository)。创建的时候,需要指定在那个目录下创建这个源码储存库。有两种方法来指定目录。一是利用"-d <目录路径>"选项来指定,例如:-d /usr/local/cvsroot。另一种更方便的方法是在shell里设定一个名叫CVSROOT的环境变量。使用csh或者tcsh的用户可以使用命令setenv来设定,在文件 .csh rc或者文件 .tcshrc里添加入下的一行:
     setenv CVSROOT /usr/local/cvsroot
  使用sh或者bash的用户需要在文件 .profile或者文件 .bashrc里添加如下两行:
     CVSROOT=/usr/local/cvsroot
     export CVSROOT
  设置了环境变量CVSROOT后,我们运行命令cvs init,CVS将在指定的目录下面建立自己所需要的一些文件,以后我们使用CVS管理的任何项目,都会被CVS储存在这个目录之下。不过千万要注意的是:永远不要去试图修改这个目录下的文件。这个目录是由CVS自己进行管理的,轻率的改动可能会导致你丢失你部分或全部的交由CVS管理的源代码或其他资源。
  
  3.2 导入项目到CVS中去
  
  初始化结束以后,我们要真正开始利用CVS来管理自己的程序网络蚂蚁了。第一步,我们将这个项目交由CVS管理。使用如下的CVS的import命令,将源程序导入到CVS的源码储存库中去:
     cd netants
     cvs import -m "start my project: Netants" netants yoyo start
  这个命令看起来有些复杂,需要解释一下。import是cvs的导入命令,默认状况下,它循环的将当前目录下的所有文件(包括子目录)导入到源码库(即CVSROOT指定的目录)里去。-m "start my project: Netants"告诉CVS你对这一步操作的说明。这是CVS强制要求的,如果你没有使用这种-m "字符串"的选项,CVS将会弹出一个文本编辑器(如果自己不特别指定的话,在Linux下一般是vi,而在Windows下则是Notepad),让你输入一些说明信息它才罢休。netants是这个项目被CVS存储时的路径名,即CVS将在创建一个$CVSROOT/netants的目录,并在此目录下存放此项目的文件,当然,它不是原封不动的存储,CVS会做一番处理。后两个字符串设定了两个标记(tag),现在并没有什么用处,但它们同样是CVS指定必需的,所以我们添上这两个参数。执行此命令时,CVS自动将所有的文件版本设为1.1,这是它所认为的低版本。以下为执行上述命令后的显示信息: N netants/netants.c N netants/http.c N netants/http.h N netants/netants.h N netants/Makefile
  
  No conflicts created by this import N表示New,CVS成功的加载了这些文件,并没有发现冲突。
  上面的命令稍长了一些,而且显得有些繁琐,相信我,CVS不总是这样的,这点"繁琐"相对它给我们带来的便利是完全可以忽略不计的。
  
  3.3 从CVS中导出项目
  
  好了,我们把自己的netants的项目交给了CVS去管理,现在,我们完全可以删除原有的存储我们代码的netants目录(当然,安全起见,你或许应该再做一次备份,并希望是后一次)。我们要进行开发工作了,建一个目录,叫什么呢,叫worktmp吧。我们进到此目录下,执行命令cvs checkout netants,我们将会看到如下的信息: cvs checkout: Updating netants U netants/Makefile U netants/http.c U netants/http.h U netants/netants.c U netants/netants.h
  CVS在当前目录下建立一个叫做netants的目录,我们原先的代码文件都在这个目录下出现了,而且还多了一个名为CVS的目录。目录CVS下面存放的是一些文本文件,记录了CVSROOT的位置、此项目对应源码库中那个目录等一些信息。

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