CVS使用详解.docx

上传人:b****5 文档编号:30225437 上传时间:2023-08-07 格式:DOCX 页数:96 大小:56.32KB
下载 相关 举报
CVS使用详解.docx_第1页
第1页 / 共96页
CVS使用详解.docx_第2页
第2页 / 共96页
CVS使用详解.docx_第3页
第3页 / 共96页
CVS使用详解.docx_第4页
第4页 / 共96页
CVS使用详解.docx_第5页
第5页 / 共96页
点击查看更多>>
下载资源
资源描述

CVS使用详解.docx

《CVS使用详解.docx》由会员分享,可在线阅读,更多相关《CVS使用详解.docx(96页珍藏版)》请在冰豆网上搜索。

CVS使用详解.docx

CVS使用详解

CVS使用详解

一、CVS简介

CVS是ConcurrentVersionsSystem的简称。

它是促进了OpenSource成功发展。

CVS解决多人合作开发时程式版本控管的问题.

二、术语中英对照

专案:

project

档案库:

repository

汇入专案:

import

发行版本:

version

正式版:

release

修改版次:

revision

版次编号:

revisionNumber

工作版本:

workingrevision

库存版本:

repositoryrevision

存入:

commit(ci/com)(我们常称此一动作为checkin)

取出:

checkout(co/get)

更新:

update(up/upd)

在库状态:

status(st/stat)

差异:

diff(di/dif)

新增:

add(ad/new)

移除:

remove(re/delete)

记录:

log(lo/log)

标记:

tag(ta/freeze)

最新版:

Up-to-date

已修改:

LocallyModified

需更新:

NeedsPatch

需合并:

NeedsMerge

三、关於CVS的版本编号

CVS的版次编号(revisionnumber)只做为CVS内部控管之用,和将来发行的软体版本(version)无关。

也就是说:

若某一支程式在CVS中版次编号为1.5,而发行的软体版本"您把它称为"SFS3.0版,那麽,这个1.5内部版次和3.0软体版本,是完全风马牛不相关的!

CVS的版次成长的过程如下:

第一次将专案汇入CVSServer时,所有档案的版次编号皆为1.1.1.1。

若修改存入档案库之後,版次编号就由1.2起跳,尔後每存入一次,版次编号就增加1。

您可以放心尽情地修改,不同的程式档之间的版次编号不必一致,也就是说:

一个专案中,A这支程式到了1.83版,B这支程式只到了1.3版,并不会影响将来发行软体的版本,我们可以利用标记(tag)等方式,来达到进一步控管的功能。

四、CVS的操作方式

cvs的操作方式,通常是:

cvs+动作命令+档案名称

常见的动作命令有:

loign、logout、commit、checkout、update、status、diff、log、add、remove等等,大部份的动作命令有简写,如commit可简写为ci,checkout可简写为co,update简写为up,status简写为st....,其它简写,可以执行cvs--help-synonyms查知。

除了动作命令之外,还有一些动作选项,比如cvsdiff-cinde.php这个-c即为diff的动作选项,它可显示出工作版本和库存版本差异之处的原始码对照。

这些选项,您可用mancvs查知

若不指定档案名称亦可,cvs会针对目前工作目录下,所有档案及子目录,统统视为作用对象。

如比:

更新工作版本时,cvsupdate不加档名,则cvs会将您目前工作目录下所有的档案及子目录皆予以更新。

若执行cvsupdateindex.php,则只有index.php这个档案会被更新。

 

五.CVS的使用流程

CVS使用Client/Server架构,Server端会开启2401这个服务通道,client端您可以选用cvs程式、支援CVS的编辑器(如emacs)、或CVS的操作环境(如Windows平台的wincvs/KDE平台的Cervisia)。

参与合作开发的伙伴,每一位都会由CVSServer档案库中,下载取出一份专案,这份专案储存在该员的硬盘中,我们称之为工作版本。

CVS使用的方式,便是:

每位成员编辑自己的那一份工作版本,再将修改结果上传存入CVSServer档案库中,而这个过程,由CVS系统来帮忙记录及控管。

登入(login),只需做一次。

需要密码认证,除非是允许匿名登入,否则都要输入CVSServer管理者配给您的密码。

取出(checkout)整份专案(类似档案下载)。

此时,您的硬盘中会有一份专案的原始码目录,我们称之为工作目录。

依您的程式意图,修改某一支程式。

查询程式的在库状态(status)。

(3、4这二个动作可互调或合并操作)

视在库状态,比对二者的差异(diff),调整修改的程式(是否和他人修改的部份发生冲突,若无冲突,那就十分单纯,可在修改完之後,直接存入(commit/ci)档案库(repository)中)

若有冲突,在maillinglist中,和他人讨论,取得协调。

将修改好的档案commit存入CVS档案柜(俗称checkin,类似档案上传),请务必在程式码注解中,详述您的意图。

透过maillinglist说明您的想法,和大家讨论。

每经过一段时日,应查询在库状态,并更新您的工作目录(update)。

六.使用CVS的准备动作

使用CVS前,应先设妥CVSROOT环境变数,请在~/.bash_profile(个人适用)或/etc/profile(全体适用)中加入以下设定:

exportCVSROOT=:

pserver:

ols3@xxx.xxx.edu.tw:

/home/export

注:

pserver:

ols3@xxx.xxx.edu.tw:

/home/export

只是一个例子,其中的帐号/主机/CVS目录,请勿直接套用。

实际设定值,请询问您的CVS管理员。

 

上述设定,在重新开机登入主机之後,即可生效。

若不想重新登入主机,可执行source~/.bash_profile,然後echo$CVSROOT看看,显示的变数内容是否正确?

若不设CVSROOT环境变数,将来所有cvs动作命令,都必须在命令列中直接指定,如下所示:

cvs-d":

pserver:

ols3@xxx.xxx.edu.tw:

/home/export"login

cvs-d":

pserver:

ols3@xxx.xxx.edu.tw:

/home/export"checkoutsfs2

若您已设妥CVSROOT,不代表您只能使用一台CVSServer而已,若有其它CVSServer,您可以在命令列中以-d直接指定。

七.登入CVS

 

#cvslogin

cvs-d":

pserver:

ols3@xxx.xxx.edu.tw:

/home/export"login

 

它会问你密码,正确回答密码之後,不会显示任何讯息。

cvs会将认证资讯,储存在~/.cvspass中,尔後,您就不必再做登入的动作了。

(除非您删除了.cvspass)

如下所示:

$cvslogin

Logginginto:

pserver:

ols3@xxx.xxx.edu.tw:

2401/home/export

CVSpassword:

 

登出则为:

cvslogout

它会将~/.cvspass清空,档案大小变成0,如下所示:

-rw-------1ols3ols3010月2121:

05/home/ols3/.cvspass

 

若已登出,则下次使用cvs各项命令动作之前,需再做登入的动作一次。

八.取出整份专案

请先切换到您喜爱的工作目录中,比如:

cd~/tmp

使用法:

cvscheckoutsfs2

cvscosfs2

 

它会在~/tmp目录下,产生sfs2目录,该目录中的内容全数由CVSServer中下载。

往後您就以在~/tmp/sfs2中,来编辑修改sfs2专案的各个程式档了。

您取出的专案版本,我们就称之为工作版本,存放在CVSServer中的称为库存版本;下载的sfs2这个目录,则称为工作目录。

如下所示:

$cvscosfs2

....以上省略....

Usfs2/upgrade/1.gif

Usfs2/upgrade/footer.php

Usfs2/upgrade/header.php

Usfs2/upgrade/sfs2.sql

Usfs2/upgrade/update_function.php

Usfs2/upgrade/upgrade1.1-2.0.php

Usfs2/upgrade/ustep0.php

Usfs2/upgrade/ustep1.php

Usfs2/upgrade/ustep2.php

Usfs2/upgrade/ustep3.php

Usfs2/upgrade/ustep4.php

九.查询状态

使用法:

cvsstatus档案名称

cvsst档案名称

cvsst

 

若不加档案名称,则会显示所有档案的状态。

例:

$cvsstindex.php

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

File:

index.phpStatus:

Up-to-date

Workingrevision:

1.1.1.1

Repositoryrevision:

1.1.1.1/home/export/sfs2/index.php,v

StickyTag:

(none)

StickyDate:

(none)

StickyOptions:

(none)

表示index.php目前最新版是1.1版(以1.1.1.1代表)

 

请注意上面右上角的讯息Status,常见的讯息有:

Up-to-date:

最新版

LocallyModified:

已修改

NeedsPatch:

需更新

NeedsMerge:

需合并

十.修改程式、存入档案库

使用法:

cvscommit档案名称

cvsci档案名称

cvscom档案名称

cvsco

 

若不加档案名称,则目前目录下所有档案及子目录全部存入。

例:

index.php程式码内容原为:

php

session_start();

/*取得学务系统设定档*/

include"include/config.php";

//--程式档头

head("首页","",1);

//列出模组

print_module

(1);

foot();

?

>

在第2列新增一列注解#启动session

变成:

php

#启动session

session_start();

/*取得学务系统设定档*/

include"include/config.php";

//--程式档头

head("首页","",1);

//列出模组

print_module

(1);

foot();

?

>

先查一下它的状态:

$cvsstindex.php

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

File:

index.phpStatus:

LocallyModified

Workingrevision:

1.1.1.1

Repositoryrevision:

1.1.1.1/home/export/sfs2/index.php,v

StickyTag:

(none)

StickyDate:

(none)

StickyOptions:

(none)

 

由右上角这句Status:

LocallyModified,表示cvs已把档案库中的index.php和~/tmp/sfs2/index.php这个同名的local档案做了比对,它发现有人已对local的index.php做了修改。

接着,将index.php存入CVS档案库中:

cvsci-m"增加一列注解"index.php

 

ci是存入之意,-m後面接续本次存入的记录讯息,主要目的,是用来让自己及合作伙伴,将来能对这次的修改动作有迹可循。

若您没有加-m"记录讯息"也无妨,cvs会主动叫出vi,要求您必须输入记录讯息,如以下操作画面:

增加一列注解

CVS:

----------------------------------------------------------------------

CVS:

EnterLog.Linesbeginningwith`CVS:

'areremovedautomatically

CVS:

CVS:

Committingin.

CVS:

CVS:

ModifiedFiles:

CVS:

index.php

CVS:

----------------------------------------------------------------------

 

按wq存档离开,出现以下画面:

$cvsciindex.php

Checkinginindex.php;

/home/export/sfs2/index.php,v<--index.php

newrevision:

1.2;previousrevision:

1.1

done

 

由上述讯息可知:

index.php已成功存入档案库,目前修改版次为1.2。

用cvsstindex.php再查查看index.php状态:

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

File:

index.phpStatus:

Up-to-date

Workingrevision:

1.2

Repositoryrevision:

1.2/home/export/sfs2/index.php,v

StickyTag:

(none)

StickyDate:

(none)

StickyOptions:

(none)

 

由右上角Status:

Up-to-date这个讯息可知:

index.php存入成功,和目前工作目录下的工作版本一致,已是最新的版本了。

 

--------------------------------------------------------------------------------

十一.更新工作版本

经过一段期日,或许别人已修改了某些程式码存入档案库中,此时应该用update指令,更新一下目前的工作版本。

使用法:

cvsupdate档案名称

cvsup档案名称

cvsup

若要连档案库中新增的目录也下载,要加上-d选项。

cvsup-d

 

若不加档案名称,则会更新所有的档案及子目录内容。

例:

$cvsupdate

显示画面如下:

cvsserver:

Updating.

Uindex.php

cvsserver:

Updatingadmin

cvsserver:

Updatingadmin/board_man

...以下省略....

 

$cvsupindex.php

Uindex.php

 

上述出现Uindex.php,表示local工作版本index.php已经更新,和库存版本一致。

若您在更新之前,已修改了index.php,会出现以下情况:

$cvsup

cvsserver:

Updating.

Mindex.php

cvsserver:

Updatingadmin

cvsserver:

Updatingadmin/board_man

...以下省略....

 

Mindex.php表示local版本已被修改,update命令不会予以覆盖更新,您可以查询一下状态:

$cvsstindex.php

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

File:

index.phpStatus:

LocallyModified

Workingrevision:

1.7

Repositoryrevision:

1.7/home/export/sfs2/index.php,v

StickyTag:

(none)

StickyDate:

(none)

StickyOptions:

(none)

 

由Status:

LocallyModified可知您已修改了local工作版本,和库存版本并不一致。

有时我们需要看看二者有何差异。

详情请见下一节内容。

十二.比对版本差异

当发现工作版本和库存版本不一致时,需要比对了解差异之处。

使用法:

cvsdiff档案名称

cvsdif档案名称

cvsdiff

以上将简单列出,比对的差异列数及内容

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

cvsdiff-c档案名称

cvsdif-c档案名称

cvsdiff-c

以上命令将完整显示差异之原始码对照

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

diff也可以指定要和那一个修改版次做比对:

如:

cvsdiff-r1.5-cindex.php

即表示要拿index.php的工作版本和库存版本1.5比较差异。

 

若不加档案名称,则会比对所有的档案及子目录内容。

例:

$cvsdiff

显示画面如下:

cvsserver:

Diffing.

Index:

index.php

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

RCSfile:

/home/export/sfs2/index.php,v

retrievingrevision1.7

diff-r1.7index.php

15d14

<#3333333333333333

cvsserver:

Diffingadir

cvsserver:

Diffingadmin

cvsserver:

Diffingadmin/board_man

cvsserver:

Diffingadmin/board_man/images

cvsserver:

Diffingadmin/create_data

cvsserver:

Diffingadmin/create_data/images

cvsserver:

Diffingadmin/fixed_man

cvsserver:

Diffingadmin/fixed_man/images

...以下省略...

注意!

若不想显示一些不相干的Diffing讯息,

可多加一个-Q(最安静)或-q(安静)的选项:

cvs-Qdiff

cvs-qdiff

或直接加入档名

cvsdiffindex.php

 

上面讯息中,有几个地方解释於下:

RCSfile:

/home/export/sfs2/index.php,v

这一列是说:

CVS使用RCS这个版本控制系统的档案格式

retrievingrevision1.7

这一列是说:

正在取出的库存版本的修改版次是1.7

diff-r1.7index.php

这一列是说:

工作版本index.php和库存版本1.7做比对

15d14

<#3333333333333333

这二列是说:

比对结果发现,工作版本把库存版本的第15列被删除(d),

被删的那一列内容为#3333333333333333

注意:

d代表删除

a代表新增

<这个符号代表库存版本中的某些列

>这个符号则代表工作版本中的某些列

 

再举一个例子:

$cvsdiffindex2.php

Index:

index2.php

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

RCSfile:

/home/export/sfs2/index2.php,v

retrievingrevision1.2

diff-r1.2index2.php

2a3

>#session的意义您了解吗?

解释如下:

RCSfile:

/home/export/sfs2/index2.php,v

CVS中的RCS档是index.php,v(CVS其实是借用RCS版本控制的格式)

retrievingrevision1.2

目前取出的修改版次是1.2

diff-r1.2index2.php

比对1.2和工作版本index2.php的差异

2a3

在第2列之後,工作版本新增(add,以a简写)了第3列,

第3列的内容为

#session的意义您了解吗?

>代表工作版本中的某些列

 

不过,上述比对差异太过简单,有时不容易看出端倪,因此,最好能将二者的差异之处,以原始码对照的方式列出来,将会比较清楚。

此时,要加一个-c的动作选项,如以下例子:

$cvsdiff-cindex.php

有以下结果:

Index:

index.php

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

RCSfile:

/home/export/sfs2/index.php,v

retrievingrevision1.7

diff-c-r1.7index.php

***index.php19Oct200214:

58:

16-00001.7

---index.php20Oct200207:

42:

11-0000

***************

***12,18****

#22222222222222

#echotest

//列出模组

-#3333333333333333

print_module

(1);

f

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1