版本控制(CVS)使用(附安装配置)

Posted by yinhua on 十二月 27, 2012
前端开发, 用户研究

    说到版本控制,较为常见的就是CVS和SVN,不过很多人都说SVN是CVS的升级,这是不对的。虽然很多人都在使用SVN,但它确实只是和CVS类似的一个产品而已。
    Eclipse从很早的版本,就默认支持CVS,SVN是Eclipse什么时候开始默认支持的就不说了。(那些插件封装,看上去也是Eclipse的就不提了:)
    针对这两个。简单说一下个人的感受和认识。

    总的来说,两个都不错。若都是在客户端,尤其是集成开发环境中,用起来就没太多差别了。并只要是版本控制,其流程是大同小异的。
当然,一些特殊情况下,比如不用版本控制的客户端时,由于在存储上CVS是个基于RCS文件的版本控制系统。每个CVS文件就是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,你可以直接看库文件(有时会用得上:)。而SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的,想简单的用cat命令或记事本看一眼恐怕不行了。
     所以,若是一般的开发中,还是用CVS比较好。当然有人说CVS性能差点,好像确实是这样。不过,CVS的话,linux下的服务端要比win下的性能好很多,或许和svn就没太多差距了,至少感觉不明显了。

     那svn什么时候用呢?svn的优点个人感觉在分支与merge上。也就是说,在某个工程的某个版本上,生出一个新的分支,和原来的功能也逐渐差异越来越大。但有时候,可能两者之间,有些新功能模块代码可能会借用,或者再整合在一起。这方面,svn的功能比较强,CVS就显得不太适用了。另外,svn对多种文件类型支持的比较好。

CVS的使用:使用方面,不考虑分支合并什么的,无非几个主要操作:
1. 下载(checkout): 将版本控制服务器的的文件下到本地。(本地没有该工程时)

2.  同步:检查本地版本和版本控制服务器上的版本差异。

3.  更新(update):将版本控制服务器的新版的文件下到本地,本地存在,就覆盖本地文件。(本地有该工程时)
    版本控制的一个基本概念,就是基于版本号来控制多人工作之间的协同。
    例子:你从版本服务器上checkout一个1.01版本的文件到本地。在过段时间后,与版本控制服务器同步,发现有些文件更新了,变成了1.02或更高。
    而你本地的还没有改过,继续是1.01版,这时候,你就可以使用update操作,把新版本下载下来,覆盖本地的文件。(不用担心,原来1.01版,真需要的话,还是能从版本控制服务器找回来的)
    很不巧,你当时下到的1.01版修改了一些内容,你本地的文件,变成了“更改后的1.01版”。而版本控制服务器上版本已经不再是1.01(更高),这个时候就比较麻烦了。
  ->>若是你觉得自己改得不重要,可以废掉,那你可以强制更新(override Update),把服务器上的版本下到本地,覆盖本地的;(这次,你以前改的将找不回来了)
  ->>若是你觉得自己改得重要,不能废掉,那就继续向下看。

4. 上传(commit(checkin)): 开发中你所写的代码,或生成新源码文件之类的,上传到版本控制服务器。
    例子:你从版本服务器上checkout一个1.01版本的文件到本地。在修改了一些内容后,你本地的文件,就变成了“更改后的1.01版”。若这时说服务器上的版本没变化,还是1.01,你使用该功能(commit(checkin))上传到版本服务器,那上面的版本和本机的版本号都会“增加”,比如变成1.02。
    但若是服务器上的版本变化了不再是1.01(更高了)。而且你觉得自己改得重要,不能废掉。(也就是上面讲到的情况)那:
     ->>若是你觉得服务器上的可以废掉(你看过了),那你可以强制上传(override and commit),也就是把你本地版本的文件上传服务器;注意,这是不是覆盖,而是再次增加版本号,比如之前已经到了1.03,你强制上传后会变成1.04。(和覆盖本地不同,原来版本1.03还能找回来,或者综合起来说,只要是版本控制服务器存过的版本,都能找回来)。
     ->>若是你觉得,或者发现服务器上的新版改动过的地方,以及你自己在本地改动过的地方,都很重要。
       –>>>运气很好。是文本内容的文件,你可以使用客户端一般都带的功能,那就是比较(在有的开发环境里,可能是对单个文件进行同步的操作是该功能),可以比较两版的不同(该功能会把不同的地方标出来),把需要的左右挪移,合并出一个皆大欢喜的版本(就是比较费时间和眼睛);当然,也有一个不是普适的省事办法,那就是在冲突的文件上使用更新(update,不同的客户端可能操作不同),若是内容冲突不是发生在同一行文本中,你本地的版本就会变化这些改动,你本的版本号就会变成和服务器一致的“版本改动版”,比如“更改后的1.03版”,这是你就可以继续提交上传了。着重说明:这种方法要谨慎,因为若是程序的话,有很多逻辑关联。别人增加或变动的代码行,虽然你对本地文件对应的那个没有改,但不代表合上你改动后的代码就没问题。
       –>>>运气不好。不是文本内容的文件,那这时候想办法系统外解决,搞出皆大欢喜的版本,然后由你强制上传,或者还是对方继续上传,你强制更新本地的。

版本控制使用原则或经验

No1 修改的工作,勤快上传。不要等所有的内容都开发完再提交,如果你和其他同事一起开发,就会造成合并困难。并且没有用到版本控制的好处,版本控制的好处就是能记录你对每一个文件进行的任何一次细微的修改。
    如果这样你觉得太麻烦,至少保证每天下班时,把有变动的文件上传版本服务器。因为大部分程序员的习惯,是上班的时候,把整个工程同步一下更新。(没这个习惯,就养成这个习惯:)

No2 上传的应该是没有明显错误的(对程序员来说)。在开发环境中直接就提示着错误的代码,是不应上传的。


=========================
附:
安装就不多说了,不管是win上还是linux上,单纯的安装都比较简单。

 CVS软件服务器端的配置(Linux大多数版本):
1. CVS服务是通过xinetd来启动的,由于在现在的Linux发行版中都是用新xinetd代替了inetd,用xinetd来启动cvs服务,需要进入/etc/xinetd.d/目录,新建或编辑已有的一个文本文件,如这个文件的内容如下所示:
service cvspserver
{
 disable = no   //是否启动
 port   = 2401
 socket_type  = stream
 protocol  = tcp
 wait   = no
 user   = naviusr  //指定该服务在操作执行时的用户身份
 passenv   = PATH
 server   = /usr/bin/cvs
 env   = HOME=
 server_args  = -f –allow-root=/……/cvshome pserver //指定了cvs使用pserver认证方式
# bind   = 127.0.0.1
}

2.创建环境变量CVSROOT,此环境变量指明了数据仓库所在的位置,环境变量在profile文件中或者rc.local中用

export CVSROOT=/……/cvshome 加入一下。
 
3.初始数据仓库的目录
cvs -d /……/cvshome init

4. 初始化/cvsroot目录后会自动在/cvsroot目录下产生一个CVSROOT的目录,此目录下的文件是CVS的配置文件,对几个主要文件的说明如下:
cvswrappers 定义一个包装程序当文件登记或检取时就会执行
editinfo 允许你在commit命令启动前在日志信息被记录后执行的脚本
loginfo 类似coimmitinfo, 只是在文件提交后执行
rcsinfo 为commit log回话指定一个模板.
taginfo 定义在任意”tag”操作后执行的程序.
readers 设置有读权限的用户清单 (系统默认没有此文件,必须手工添加)
writers 设置有读写权限的用户清单 (系统默认没有此文件,必须手工添加)
    特别说明的文件是passwd 该文件有个很重要的作用,就是进行用户管理。版本控制一个最大的作用就是为团队协作提供版本控制,若是多个用户不能很好的访问,版本控制也就没意义了。网上很多文章都介绍使用系统用户组的方式,但说的不详细,而且笔者试过,设置很麻烦。
passwd这个文件提供了另一种方式。其内容格式如下:
    usrname:密码(被加密后的)::naviusr(对应的系统用户)
usrname是你设置的一个用户名,这个不是系统中的用户,密码部分可使用htpasswd命令生成,如:
htpasswd -c [要存的文件名] [用户名]
执行后,就会存一个文件,里面的内容就会有所需要的,加密后的密码。按照格式填进passwd文件中去,就可以使用这个“用户”来访问CVS版本服务器了。在其使用中,使版本服务器后台产生的文件操作,其权限是passwd文件中“(对应的系统用户)”的身份权限。

这个工作在win下比较方便,因为命令支持直接生成密码配置,并存到那个passwd文件中。
win下CVS用户设置:
set CVSROOT=E:\ProjData\cvshome
cvs passwd -a -r [系统用户] liupx

到此为止,CVS服务器的配置就做完了,可以使用CVS服务器了。测试可使用命令:
cvs -d :pserver:cvsroot@192.168.1.22:/home/cvsroot login

===================
再转附:CVS客户端软件WinCVS的配置。(虽然很多使用场景是在IDE下使用,但这个工具不只是开发人员再用:)
1. 软件说明:虽然您在UNIX上安装的CVS软件即包括了Server端又包括了Client端,但是你在使用时需要记忆那些反烦琐的命令,现在有一个软件WinCVS是运行在Windows下的一个CVS的客户端软件,
2. 软件安装:得到WinCVS的安装程序后执行里面的setup.exe文件,安装到你指定的目录下。
3. 软件的启动:开始-程序-GNU-WinCVS1.3-WinCVS
4. 软件的配置:在Admin菜单下选择Preferences…,弹出的窗口中选“General”页面,具体设置如下所示:
Authentication: pserver (认证方式为pserver,这是默认的认证方式)
Path: /home/cvsroot (在服务器上数据仓库的路径)
Host address: 192.168.1.22 (服务器的IP地址)
User name: bjcvs (登陆服务器的用户名)
CVSROOT: 设置完成上面的项目后,此项会自动生成,在此不必设置

分享到:

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>