CVS 是 Concurrent Version System(并行版本系统)谈

dousfirs

dousfirs

2016-02-19 13:22

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐CVS 是 Concurrent Version System(并行版本系统)谈,赶紧看过来吧!

  [转载]CVS 是 Concurrent Version System(并行版本系统)谈
  
  
  作者:eclipse 发表时间:2002/08/18 10:27am
  
  作者:龚天乙
  CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本治理。在多人团队开发中的作用更加明显。CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库治理员统一治理这些源程序。这样,就好象只有一个人在修改文件一样。避免了冲突。每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库治理员统一 修改。这样就可以做到跟踪文件变化,冲突控制等等。
  
  由于CVS是建立在在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,所以CVS多是Linux(UNIX)系统中所使用,本文中服务器端设置也是以Linux为例。
  
  一、CVS服务器的安装
  
  首先确认系统中是否安装CVS服务:
  [root@localhost /]# rpm -qagrep cvs
   cvs-1.11.2-cvshome.7x.1
  假如命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包,或者到http://www.cvshome.org下载。
  
  1、建立 CVSROOT
  
  目录,因为这里涉及到用户对CVSROOT里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组。假设我们建一个组叫cvs,用户名是cvsroot。建组和用户的命令如下
  
   #groupadd cvs
   #adduser cvsroot
  
  生成的用户宿主目录在/home/cvsroot(根据自己的系统调整)
  
  2、用cvsroot 用户登陆,修改 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限: 
  
  $chmod 771 . (或者770应该也可以)
  
  注重:这一部分工作是按照文档说明做的,是否一定需要这样没有试验,我会在做试验后在以后版本的教程说得仔细一点。假如您有这方面的经验请提供给我,谢谢。
  
  3、建立CVS仓库,(仍然是 cvsroot 用户),用下面命令:
  
  $cvs -d /home/cvsroot init
  
  4、以root身份登陆,修改 /etc/inetd.conf(使用 xinetd 的系统没有此文件)和 /etc/services
  
  假如用的是 inetd 的系统,在 /etc/inetd.conf 里加入:
  
  cvsserver  stream tcpnowaitroot/usr/bin/cvscvs -f --allow-root=/home/cvsroot pserver
  
  说明:上面的行是单独一整行,/usr/bin/cvs 应该是你的cvs版本的命令路径,请根据自己的系统调整./home/cvsroot是你建立的CVSROOT的路径,也请根据上面建立目录的部分的内容做调整。
  
  假如是使用 xinetd 的系统,需要在 /etc/xinetd.d/ 目录下创建文件 cvspserver(此名字可以自己定义),内容如下:
  
  # default: on
  # description: The cvs server sessions;
  
  service cvsserver
  {
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/cvs
  server_args = -f --allow-root=/cvsroot pserver
  log_on_failure += USERID
  only_from = 192.168.0.0/24
  }
  
  其中only_from是用来限制访问的,可以根据实际情况不要或者修改。修改该文件权限:
  
  # chmod 644 cvspserver
  
  在/etc/services里加入:
  
  cvsserver2401/tcp
  
  说明:cvsserver 是任意的名称,但是不能和已有的服务重名,也要和上面修改 /etc/inetd.conf 那行的第一项一致。
  
  5、添加可以使用 CVS 服务的用户到 cvs 组:
  
  以 root 身份修改 /etc/group,把需要使用 CVS 的用户名加到 cvs 组里,比如我想让用户 laser 和gumpwu 能够使用 CVS 服务,那么修改以后的 /etc/group 应该有下面这样一行:
  
  cvs:x:105:laser,gumpwu
  
  在你的系统上GID可能不是105,没有关系。主要是要把laser和gumpwu用逗号分隔开写在最后一个冒号后面。当然,象RedHat等分发版有类似linuxconf这样的工具的话,用工具做这件事会更简单些。
  
  6、重起inetd使修改生效:
  
  #killall -HUP inetd
  
  假如使用的是 xinetd 的系统:
  
  # /etc/rc.d/init.d/xined restart
  
   然后察看cvs服务器是否已经运行:
   [root@localhost /]# netstat -lnpgrep 2401
  tcp0 0 0.0.0.0:24010.0.0.0:* LISTEN 1041/xinetd
   则说明cvs服务器已经运行。
  
  
  二、治理CVS服务器
  
  服务器可以用了,现在大家最关心的就是如何治理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?
  
  不难,在 cvs 治理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
  
  passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
  
  {cvs 用户名}:[加密的口令]:[等效系统用户名]
  
  假如你希望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你需要以 cvs 治理员用户手工创建,当然要按照上面格式,第二个字段是该用户的加密口令,就是用 crypt (3)加密的,你可以自己写一个程序来做加密,也可以用我介绍的偷懒的方法:先创建一个系统用户,名字和 cvs 用户一样,口令就是预备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后再把这个用户删除。这个方法对付数量少的用户比较方便,人一多就不合适了,而且还有冲突条件(race condition)的安全隐患,还要 root 权限,实在不怎么样。不过权益之计而已。写一个小程序并不难,可以到 linuxforum 的编程版搜索一下,有个朋友已经写了一个贴在上面了。
  
  第三个字段就是等效系统用户名,实际上就是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了。
  
  readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。
  
  writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。
  
  上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧。假设我们有下面几个用户需要使用 cvs:
  
  laser, gumpwu, henry, betty, anonymous。
  
  其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有。那么好,我们先做一些预备工作,先创建一个 cvspub 用户,这个用户的责任是代表所有非系统用户的 cvs 用户读写 cvs 仓库。
  
  #adduser
  ...
  
  然后编辑 /etc/group,令 cvspub 用户在 cvs 组里,同时把其它有系统用户权限的用户加到 cvs 组里。(见上文)
  
  然后编辑 cvs 治理员家目录里 CVSROOT/passwd 文件,加入下面几行:
  
  laser:$xxefajfka;faffa33:cvspub
  gumpwu:$ajfaal;323r0ofeeanv:cvspub
  henry:$fajkdpaieje:cvspub
  betty:fjkal;ffjieinfn/:cvspub
  anonymous::cvspub
  
  注重:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成。
  
  编辑 readers 文件,加入下面几行:
  
  anonymous
  betty
  
  编辑 writers 文件,加入下面几行:
  
  laser
  gumpwu
  henry
  
  注重:writers中的用户不能在readers中,要不然不能上传更新文件。
  
  
  对于使用CVS的用户要修改它的环境变量,例如laser用户的环境变量,打开/home/laser(laser的宿主目录)下的.bash_profile文件,加入
  
  CVSROOT=/home/cvsroot
  eXPort CVSROOT
  
  用laser登陆就可以建立CVS项目,假如要root使用,可以修改/etc/profile文件。
  
  
  现在我们各项都设置好了,那么怎么用呢,我在这里写一个最简单的(估计也是最常用的)命令介绍:
  
  首先,建立一个新的CVS项目,一般我们都已经有一些项目文件了,这样我们可以用下面步骤生成一个新的CVS项目:
  
  进入到你的已有项目的目录,比如叫 cvstest:
  $cd cvstest
  运行命令:
  $cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
  说明:import 是cvs的命令之一,表示向cvs仓库输入项目文件。 -m参数后面的字串是描述文本,随便写些有意义的东西,假如不加 -m 参
  数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量EDITOR来改成你喜欢用的编辑器。)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字命名的仓库里。)
  v_0_0_1是这个分支的总标记。没啥用(或曰不常用。)
  start 是每次 import 标识文件的输入层次的标记,没啥用。
  这样我们就建立了一个CVS仓库了。
  
  建立CVS仓库的文件夹应该是“干净”的文件夹,即只包括源码文件和描述的文件加,而不应该包括编译过的文件代码等!
  
  三、使用CVS
  
  winCVS是一个很好的CVS客户端软件,在http://cnpack.cosoft.org.cn/down/wincvsdailyguide.pdf可以下载到这个软件的使用手册。这里不在赘述了。
  
  四、用CVS治理项目
  
  本人正在一加公司从事该公司ERP项目的开发,在没有使用CVS的时候,多次出现了由于不同的开发人员修改同一程序,而导致程序错误,解决版本控制问题迫在眉睫。
  
  由于这个项目采用Linux平台下Java开发,使用的开发工具Jbulider是支持CVS进行项目治理的,作为主程序员,我决定采用CVS进行版本控制,首先参照上文在Linux服务器上建立了CVS服务,然后我把我本地的工程文件传至服务器。
  
  例如:我的工程文件在F:ERP下,我把ERP下的erp.jpx文件、defaultroot文件夹和src文件夹上传至服务器/usr/local/erp下,然后登陆Linux服务器,登陆的用户是CVS的用户,其环境变量要正确(我的用户名为admin)
  #cd /usr/local/erp
  #cvs import -m "this is a ERP project" erp v_0_0_1 start
  
  这样名为erp的CVS仓库就建立了。
  
  之后开发小组的成员可以用winCVS把该项目下载到本地:
  
  打开winCVS
  点击工具栏Create - Create a new repository... 弹出窗口
  在Grenral中
  Enter the CVSROOT填写admin@192.168.1.9:/home/cvsroot 其中admin是cvs的用户,在本例中admin也是linux的系统用户,192.168.1.9是服务器的地址,/home/cvsroot是CVS的主目录,参考上文。
  Authentication中选择"passwd file on the cvs server"
  Use version中选择cvs 1.10 (Standard)
  
  其它项默认即可。
  
  确认后,点工具栏Admin -- Login... 会提示输入密码,输入密码后,看看winCvs的状态栏。假如提示
  
  *****CVS exited normally with code 0*****
  
  表示登录正常。
  
  点击工具栏Create -- Checkout module...弹出对话框,其中的Checkout settings项中
  Enter the module name and path on the server 填写erp,即我们建立的名为erp的CVS仓库
  Local folder to checkout to 选择要下载到本地的目录,我选了F:myerp
  
  其它项目可以默认,确定后就可以下载到本地了,在F:myerp下会有一个erp文件夹,其文件结构和F:erp下的文件结构是一样的。
  
  用Jbulider打开F:myerperp下的erp.jpx文件,这个工程文件就可以使用了。
  
  在Jbuilder的工具栏Team -- Select Project VCS 弹出对话框,选择CVS
  
  对于你要进行修改的文件,在Project View中点中该文件,然后点右键,探出快捷菜单,选择CVS -- CVS Edit "xxxx.java(文件名)"
  
  第一次使用可能会提示CVS服务器的密码。
  
  在修改之前还要选择CVS -- Update "xxxx.java(文件名)"
  
  修改之后选择CVS -- Commit "xxxx.java(文件名)"
  
  这样,修改的文件就保存到CVS服务器了,Update的目的是下载、比较文件。每次在修改之前都Update,保持最新版本。
  
  CVS在项目治理使用中确实起到了良好的效果,仔细研究CVS的命令,可以更好的发挥CVS在版本控制上的能力。
  
  
  我的QQ是20896,欢迎大家来交流,也可以到我的论坛上讨论 http://www.laoer.com
  
  参考资料:《CVS 简单教程》 作者:何伟平
  《CVS服务器快速指南》 作者:何伟平
展开更多 50%)
分享

猜你喜欢

CVS 是 Concurrent Version System(并行版本系统)谈

编程语言 网络编程
CVS 是 Concurrent Version System(并行版本系统)谈

《兵王》副本系统

网络游戏
《兵王》副本系统

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

《洪荒OL》攻略之副本系统详解

手机游戏 IOS
《洪荒OL》攻略之副本系统详解

《街头霸王4》基本系统解说

电脑网络
《街头霸王4》基本系统解说

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

《圣魔之血》副本系统

网络游戏
《圣魔之血》副本系统

《无双大蛇2》基本系统简介

游戏动漫
《无双大蛇2》基本系统简介

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Execl2010中的IFERROR函数运用

Execl2010中的IFERROR函数运用

项目迭代开发手记--文件分割存储用例的实现过程(2)

项目迭代开发手记--文件分割存储用例的实现过程(2)
下拉加载更多内容 ↓