一、CVSConcurrent Version System)简介(不知道是哪个版本???)

    1CVS机制
         CVSRCS的前端工具,它是用于多用户并行开发的版本控制工具,它的最大特点 是使用了"copy-modify-merge"机制而不是"lock-modify-unlock"。通过使用 CVS生成一个存储文件的仓库(repository),存储在仓库中的每个目录叫做模块 module),在修改时将相应的模块检出到工作目录中(working directory)生成对应的目录,所有的修改都在工作目录中完成,修改完成后再提交到仓库中生成新的版本号,并加以保存。 
         CVS把文件保存在一个名叫仓库(repository)的地方,仓库中保存的文件并不是每个版本的副本,
而是可以从任意版本回溯到初始版本的一些代码的主控信息,这样,就节省了大量的存储空间
  风靡全球的LINUX操作系统就是在大型分布式CVS系统上开发成功的。
  全球最著名的软件工程软件提供商Rational SofdtwareClearCaseCVS的替代产品,比CVS稍有增强

    2CVS的版本编号
         分为系统编号和用户编号
         系统编号是CVS自动给版本编的号码。CVS自动管理系统编号。单分支版本演化以1.0->1.1->1.2-...的方式顺序进行。
         用户编号是用户为了自己控制版本号码,或者统一版本号码,而对某一版本指定的编号。 
 
二、CVS建议开发流程

      为避免其他人更新时导致无法编译的错误,建议先在开发环境中开发,编译通过后在没有大的改动情况下放入CVS中进行管理,然后发布到测试及生产环境。
 以总公司网站开发为例,流程如下:
      开发环境(192.168.16.33) -> CVS(192.168.16.38) -> 生产环境(192.168.16.34)

三、WinCvs的使用

    1、如何设置本地工作目录
           admin -> preference -> WinCvs -> HOME folder

    2、如何列出CVS服务器上的modules
           admin -> Macros admin -> Get the cvs modules
           CVSROOT 模块下的文件modules控制着modules的显示,由系统管理员管理。

    3、如何将CVS服务器上的modules取到本地工作目录?
           选中待取module -> Create -> Checkout modules... -> 输入modules ->确定(偶自己的版本:Remote—checkout module--….)

    4、如何将新增的程序或文档纳入CVS管理?
           将新增的程序或文档copyCVS本地工作目录 -> 右键 -> Add selection Add selection binary(由文档类型决定) -> Commit selection (建议文件修改后,在commit时加上本次修改的简短描述,便于以后在log中查看历史记录。)

    5、如何修改已存在程序或文档?
           右键 -> Edit selection -> 修改完毕 -> Commit selection

    6、如何放弃修改?
           只要还未commit,右键 -> Unedit selection 

    7、如何将新创建的Module放入cvs服务器中?
         1)将包含欲放入库中的目录copy于工作目录下 
         2
)输入模块   Create -> Import module   
         3
)在弹出的文件对话框中选择你要输入的工程目录的顶级目录,并确使文件夹图标打开 
         4
)如果弹出筛选窗口,确保提交的文件被正确地设置了文本或二进制 
         5
)点击OK按钮,wincvs然后将整个目录结构输入到CVS服务器中 

    8、如何更新刚创建的modules
         1)在本地移走你的原始目录
         2)将CVS服务器上的modules取到本地工作目录(参见上面第3步)

    9、如何解决冲突?
         当二人或更多人修改了同一文件时就会发生冲突,此时可打开有问题的文件,搜索以<<<<<<<开始的行。冲突区有这样的标价:
             <<<<<<< 文件名
             你的修改
             ========
             从库中合并的代码
             >>>>>>> 修订版
         你要判断代码应该是什么,作必要的修改,删除cvs的标价,然后将你的修改提交到库中。
 建议:在修改cvs中的文件时,先Update selection一下。
 
    10、如何取回以前的版本?
             Graph selection -> 右键 -> tag selection

    11、如何在modules小窗口中看见CVS的本地工作目录?
             View -> Browse Location -> 在弹出的窗口中选择本地工作目录 -> 确定

    12、查看谁在修改文件
              右键 -> Editors of selection。列出正在编辑files的用户。

    13、如何查看文件的历史修改记录?
              右键 -> Log Selection
  
    14、什么情况下需要锁定登出(checkout)?
          对于word文档、函数库等二进制文件,因无法由CVS合并,应当选中锁定登出。
           右键 -> Lock Selection
          Unreserved checkoutsCVS确省方式,允许其他用户修改被登出的文件

CVS不会告知第一个登入者是否还有人在修改文件。
          其他人要登入会得到错误信息,他们须先与仓库中的最新版本合并才能等入。
          对于源代码等,应选择非锁定登出,否则将大大降低软件生产率。
          如果非锁定登出造成严重的开幕冲突,那时因为开发者的沟通严重不足。
    
      注意:
               单纯的非锁定登出对许多项目而言是可行的。
               锁定登出控制过于严格,不利于提高软件生产率。
               介于两者之间的非锁定登出与监视机制结合,对许多小组是最佳选择。

四、CVS补遗

    
1、如何删除一个目录?
          需要先删除目录中的所以文件,使该目录成为一个空目录,然后运行cvs update -PCVS从仓库中清除空目录。
 
    2、如何重命名文件?
          将工作目录中的旧文件重命名为新文件。
           -mv old new
          通知CVS删除旧文件
           -cvs remove old
          通知CVS添加新文件
           -cvs add new
          CVS仓库中删除旧文件、添加新文件
           -cvs ci -m "name old to new" old new

    3CVS无法完成二进制文件的版本比较和版本合并,为此,应该避免版本分支。

    4CVS无法更据文件内容识别二进制文件,但能够根据文件扩展名来识别那些文件是二进制文件,这是由cvswrappers配置文件定义的。

    5、设置只读用户
          向某些用户授权读取CVS仓库中的文件,但不允许他们修改文件。
          $CVSROOT/CVSROOT/readers文件中列用户名,例如:
           xuys
           huyj
           zousj
           anonymous

五、开发要点总结

      1、要对cvs中的文件进行修改时,先Update selection一下,然后进行编辑。
      2、对于源代码的修改,应选择非锁定登出。
      3、对于word文档等二进制文件,因无法由CVS合并,应当选择锁定登出。
      4、文件修改后,在commit时最好加上本次修改的简短描述,便于以后在log中查看历史记录
      5、小组成员之间要加强沟通。

===============================================================================

CVS安装配置与使用指南

 

 

作者:Smilings 出处:CSDN

 

1 CVS工具的安装配置

 

1.1 基本安装

 

1.1.1 验证是否已安装CVS

 

#rpm -q cvs

 

如果能显示出类似这样的版本信息,证明已安装CVS

 

#cvs-1.11.2-10

 

一般安装在/usr/bin/cvs,如果未安装,http://www.cvshome.org/下载一个最新的rpm安装即可。

 

1.1.2 CVS安装

 

http://ccvs.cvshome.org/servlets/ProjectDownloadList下载最新的cvs安装包到本地后:

 

%gunzip cvs-1.11.2.tar.gz

 

%tar xvf cvs-1.11.2.tar

 

%cd cvs-1.11.2

 

%./configure (可以用./configure --help看看,根据自己的环境添加相应的参数)

 

%make

 

%su - (以正确的用户来安装)

 

%make install

 

1.2 CVS Server端的配置

 

安装完CVS(假设cvs安装在/usr/local/bin):

 

1.2.1 建立cvsroot用户和组(使cvsroot用户属于cvs,用于对cvs进行管理)

 

root用户下执行以下命令:

 

#groupadd cvs

 

#adduser cvsroot –g cvs –d /root/cvsroot

 

#passwd cvsroot

 

#输入cvsroot用户密码

 

1.2.2 创建cvsroot

 

建立用户使用的HOME目录并将HOME目录的属性给cvsroot

 

#mkdir /root/cvsroot

 

#chgrp –R cvs /root/cvsroot

 

#chown –R cvsroot /root/cvsroot

 

1.2.3 初始化CVS

 

需要在cvsroot用户下执行

 

#su – cvsroot

 

初始化CVS服务器的根目录,以后创建的CVS项目都将建立在这个目录下,采用的命令如下:

 

cvs -d /root/cvsroot init

 

这样目录/root/cvsroot就成为CVS服务器的根目录,以后创建的目录都将默认的存放在这个目录下。

 

1.2.4 设置环境变量

 

使用cvsroot用户登录,在这个用户下的.bash_profile环境配置文件,在这个文件中增加

 

CVSROOT=/var/cvsroot

 

export CVSROOT

 

1.2.5 启动CVS服务

 

/etc/xinetd.d/目录下创建文件cvspserver,内容如下:

 

# default: on

 

# description: The cvs server sessions;

 

service cvspserver

 

{

 

socket_type = stream

 

wait = no

 

user = root

 

server = /usr/bin/cvs

 

server_args = -f --allow-root=/var/cvsroot pserver

 

log_on_failure += USERID

 

only_from = 216.245.143.71/24

 

}

 

其中only_from是用来限制访问的,可以根据实际情况不要或者修改。 注意:如果路径/var/cvsroot与上面创建的不一致,或者为/var/cvsroot/,将出现no such repository问题。

 

修改该文件权限:

 

# chmod 644 cvspserver

 

然后重新启动xinetd

 

# /etc/rc.d/init.d/xinetd restart

 

然后察看cvs服务器是否已经运行:

 

# netstat -lnp|grep 2401

 

tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN xxxxxx/xinetd #netstat -l |grep cvspserver

 

tcp 0 0 *:cvspserver *:* LISTEN

 

则说明cvs服务器已经运行。

 

1.2.6 配置cvs环境

 

cvs 管理员用户的HOME目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:

 

passwdcvs 用户的用户列表文件,它的格式很象 shadow 文件:

 

{cvs 用户名}:[加密的口令]:[等效系统用户名]

 

readers:有 cvs 读权限的用户列表文件。就是一个一维列表。在这个文件中的用户对 cvs只有读权限。

 

writers:有 cvs 写权限的用户的列表文件。和 readers 一样,是一个一维列表。在这个文件中的用户对 cvs 有写权限。

 

注意:如果用户同时在readerswriters文件存在,则这个用户只有read的权限而没有write的权限。

 

1、创建可以登陆cvs服务的用户及密码,需要创建文件passwd

 

vi /root/cvsroot/CVSROOT/passwd

 

文件内容如下:

 

smilings:xxxxx:cvsroot

 

chenxu:xxxxx:cvsroot

 

此文件的意思是smilingschenxu两个用户可以登陆cvs服务器,登陆后其权限为用户cvsroot的权限

 

注意:cvs用户和服务器用户是可以不一样的

 

2xxxxxx为密码,由以下文件生成:

 

vi /var/cvsroot/passwdgen.pl

 

文件内容:

 

#!/usr/bin/perl

 

srand (time());

 

my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";

 

my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);

 

my $plaintext = shift;

 

my $crypttext = crypt ($plaintext, $salt);

 

print "${crypttext}/n";

 

3、修改passwdgen.pl为可执行

 

#chmod +x passwdgen.pl

 

 

如果需要密码为:smilings,则敲入:

 

passwdgen.pl "smilings"

 

回车即可得到加密密码,用其替换passwd文件中的xxxxxx

 

4、编辑 writers 文件,加入下面几行:

 

smilings

 

chenxu

 

注:passwd文件的格式是:

 

""为分隔,分为三部分:

 

第一部分是cvs帐号名(与系统帐号无关,也可与系统帐号名相同)

第二部分(可选项)是加密串,每个系统用户的加密串缺省是在/etc/shadow中,如果cvs帐号不是操作系统的帐号,shadow中是不会有cvs帐号的加密串的,这时就必须手工为cvs帐号生成加密串,可以将其他系统帐号的密码修改成想要的密码(此时shadow文件的加密 串跟着改变),在取得加密串后改回去。当第二部分置空时,该帐号以任何口令均可登入cvs server

第三部分(可选项)是一个操作系统帐号, 如果登陆成功, cvs用户就以此系统帐号的身份存取cvs中的源代码,这里的系统帐号是cvs权限控制的关键, 这个系统帐号有什么权限, 以此帐号身份存取cvscvs用户就有相同的权限.。注意: 考虑到cvs用户是以某个系统帐号的身份运行的, 此系统帐号应当对repository下的相应目录有写的权限, 这样就存在直接进入目录对文件进行修改的可能, 而这是cvs操作所不允许的,为了避免这种误操作, 建议在产生此系统帐号时使其shell/bin/false, 并且不设置此帐号的密码,这样可以禁止直接以此系统帐号telnet或者ftp进入CVS Server

另外,passwd文件中的用户不能重名,否则只有第一个有效。

 

1.3 CVS Client端的配置

 

1.3.1 Unix/Linux环境下

 

CVS服务器正确安装置后,就可以设置Client端来操作了。

 

设置方法是:将环境变量增加到.profile/bash_profile中:

 

export CVSROOT=:pserver: smilings@216.245.143.71:/root/cvsroot

 

%cvs login 系统将提示输入CVS口令

 

口令认证通过后,就可以进行CVS的操作了。

 

1.3.2 Windows环境下

 

http://www.wincvs.org下载最新wincvs软件并安装。

 

设置环境CVSROOT变量:

 

运行wincvs,从界面菜单处,选择admin --> preference --> General -->设置CVSROOT为::pserver:a@216.245.143.71:/root/cvsroot

 

其中的a为用户的CVS帐号,@后面是CVS服务器的IP地址。

 

cvs server的端口不是缺省的2401,需要在

 

admin --> preference --> Ports -->设置For "pserver"(passwd) port为定义的值。

 

2 CVS的基本操作

 

2.1 Unix/Linux环境下的操作说明

 

(1) 登录CVS Server

 

%cvs login

 

CVS password: ******

 

注: 如果此时提示.cvspass文件不存在,只要手工创建一个即可: %touch .cvspass

 

(2) 查看帮助

 

% cvs --help

 

%cvs –help-options

 

%cvs –help-commands

 

(3) 检取源代码(CVS服务器端的源代码下载到本地。则本地上的内容为服务器端的一个拷贝)

 

cvs co [-r tagname/revision] filename|directory

 

例:%cvs co -r aiobs61_dev products/aiobs/aiip

 

%cvs co [–D " 1 Dec 2002 "/2002-12-1/"1 Dec 20:22 "] file1

 

(4) 增加文件或目录到CVS 库中

 

$ cvs add filename|directory

 

(5) 提交文件

 

%cvs ci [-r revision] [ -m"add new functions"] [filename]

 

增加文件后,需要再执行cvs ci命令,才能完成永久提交。

 

增加目录后,则不需要再另外执行cvs ci 命令了。

 

(6) 更新当前工作目录中的文件

 

%cvs update [-d] [filename]

 

-d: 取出新增加的目录 = cvs co

 

(7) 查看文件历史记录

 

%cvs log [filename]

 

将给出文件的所有修改记录,版本信息,修改人, 修改时间及更改说明等。

 

(8) 比较文件

 

%cvs diff filename

 

cvs diff可以用来比较本地工作目录和server上的文件,也可以用来比较文件的两个版本之间的差异,实现的是按行比较。对二进制文件则无效。

 

%cvs diff –r aiobs filename

 

比较本地和另外一个分支上(分支Tagaiobs)的文件差异

 

%cvs diff -D 2002-1-3 -r cbs_rm ora.sql

 

比较某个日期与某个分支下的文件差异

 

(9) 显示文件的当前状态

 

$cvs status filename

 

常见三种状态:Up-to-date, Need-patch, Locally Modified

 

Up-to-date:表示该文件已经与CVS服务器端的最新版本是一致的

 

Need-patch:表示该文件的本地版本低于服务器端的最新版本,需要从服务器端下载更新的版本

 

Locally Modified:表示该文件在本地已经做过修改了,但还没有提交到服务器上

 

(10) 删除文件------分三步

 

%rm filename (先从工作目录中删除)

 

%cvs remove filename (从CVS中删除)

 

%cvs commit filename (永久删除)

 

(11) 删除目录

 

首先将目录中的所有文件从cvs中删除

 

% cd ..

 

% cvs update –p

 

-p: 告诉update从工作目录中删除这些空目录

 

即删除了目录下的所有文件,则CVS认为该目录已经被删除了

 

(12) 给产品/模块打tag

 

相当给产品或者模块做一个标签或快照

 

cvs rtag tagname products/module

 

cvs tag tagname products/module

 

以上两个命令功能相似,区别在于rtag直接到CVS服务器端为源代码加Tag,而使用cvs tag命令则需要事先把源代码checkout到本地。

 

(13) 建立分支

 

cvs rtag –b tagname products/module

 

cvs tag b tagname products/module

 

建立分支常用于程序bug的跟踪、修复。执行cvs tag/rtag命令时,如果使用-b参数,则表示该Tag是一个分支Tag,用户使用这个Tag可以对程序进行修改和提交。而如(12)中建立的普通Tag则只能做查询用。

 

2.2 Windows环境下的操作说明

 

(1) 运行wincvs程序

 

第一次运行时,在界面上弹出"wincvs preferences" 对话窗,以后进入时,通过选中菜单Admin--->preferences,可进入wincvs参数配置对话窗), 设置如下:

 

general页中设置CVSROOT 为:

 

:pserver:username@hostname:/root/cvsroot,

 

username是访问cvs的用户名及其密码,由CVS 管理员提供。

 

设置Authentication: "passwd" file on the cvs server

如果不希望删除空目录,在Globals页面中去掉"Prune (remove) empty directories" 选项, 并同时去掉此页中的 " chekcout readonly".WinCvs页中,设置"HOME folder"为自己的工作目录,如: E:/work

(2) 在图标栏选中"change location"图标(在目录下拉框的右边)改变缺省工作目录为:E:/work

 

(3) checkout某个module到本地

 

选中admin--->login,输入PASSWD

 

选中create--->checkout module....将弹出的对话框,checkout settings页中, 设置module name : products/aiobs63/testcase,设置local folder to checkout to: E:/work, "checkout options"页中可以设置根据日期(通过选中by date 日期格式为:YYYY-MM-DD Hour:Mins) 或者版本号(通过选中by revision/tag/branch)checkout module,点击"确定"即可将testcase目录下的全部文件check out出来。

 

(4) 增加某个已有的module(目录)CVS服务器中

 

选中create--->import module-选择一个需要checkin的目录

(例如 E:/work/products/aiobs63/testcase)在Import setting页中设置 "select module name and path in the remote server" ,输入你需要提交的位置例如: product/aiobs63/testcase,在vendor tag release tag中加入相应的标签, "Enter the log message"框内输入日志, 点击确定

增加add

Modify---> add selection

提交commit

(5) checkin 某个文件

 

运行wincvs程序,在右边的文件列表框中,选择需要check in的文件名-点右键- 选择"commit selection"-commit setting中的"enter the log message"输入修改日志-确认。

 

(6) checkout某个文件

 

运行wincvs程序,在右边的文件列表框中,选择需要check out的文件名-点右键- 选择"update selection"-"stick options"页中可以设置根据日期(通过选中"before date" 日期格式为:YYYY-MM-DD Hour:Mins)或者版本号(通过选中revision/tag/branch)checkout 文件。

 

(7) 如何打tag

 

注意: 为了便于产品管理,公司软件产品的tag都是由Build Master打的。

 

moduletag:选中module(通过wincvs界面中间部分左边地module)然后选择create--create tag by modules,在create tag settings中输入tag名和module .

对文件打tag:选中需要打tag地文件,选择modify-create a tag on selectionenter the tag name to create中输入tag

(8) 如何将本地新文档checkinCVS

 

选中新文档,选择modify-add selection,如果是NONCVS FILE(在文件status栏出现), 则会出现警告,此时应选择modify--add selection binary(以二进制方式add) 然后选择modify-commit selection将文件提交到CVS库中。

 

(9) CVSlog修改日志

 

在每次文档修改时,请按照下列内容,记录修改日志

 

修改主题:

 

修改章节:

 

修改人:

 

修改时间:

 

这些信息将被写入wincvscvslog

 

tips:

如果只是在WinCVScheck in 了新的folder,unix下仍然看不到,需要先使用: cvs upd –d foldername

 

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐