数码人家  设为首页  设为收藏  English  
数码人家
首    页无线网络网络方案技术应用学习驿站时尚生活艺术人生服务园地 
  *  软件应用    *  硬件应用    *  网络应用    *  硬件资讯
Linux系统介绍
Linux常用命令60条
Red Hat Linux入门指南
Apache服务器配置全攻略
CVS服务器安装和使用介绍
CVS客户端使用指南
Perl在WINNT下安装配置
Java 2 Develop Kit 安装
电脑技巧秘籍攻略
防止电脑死机二十五招

计算机硬件大忌
宽带共享上网和路由器设置
掌上电脑维护全攻略
打印机常见故障及解决
网卡MAC地址查询与修改
ADSL上网常见问题分析
路由器基础知识
华为路由器防火墙配置
思科路由器常用配置命令
几种电力线载波芯片比较
电力线上网技术解析

如何选购虚拟主机和托管主机
宽带通讯技术大比拼
宽带有线网络接入方式
IPTV迎来发展黄金期
IPTV向网络新媒体演化
快速了解高清电视
TFTP升级指导说明
局域网技术合适的就是最好
网络经济的模式综述
互联网精英马云的对白
WEB2.0的网站
互联网创业Web3时代
RSS知识介绍
网络广告常识
网络论坛日常用语
让搜索引擎搜到你
三大搜索引擎存在互补
IP技术网络电视应用
CDMA 1X无线冲浪纪实
CVS客户端使用指南
Jul 8,2002 Farhill of CyberHome
  CVS是Concurrent Version System(并行版本系统)的缩写,用于版本管理。在原先Unix 体系里很成熟的SCCS (Source Code Control System)和 RCS (Revision Control System)的基础上发展而来。
  CVS 的基本工作思路:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序。由仓库管理员统一管理这些源程序,这样,就好象只有一个人在修改文件一样,避免了冲突,每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地。用户做的任何修改首先都是在本地进行,然后用cvs 命令进行提交,由 cvs 仓库管理员统一修改。这样就可以做到跟踪文件变化,冲突控制等等。由于CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部分,不过大多数 CVS 软件都把它们合二为一了。这里服务器配置已完成,我只对客户端配置进行说明。
  一、客户端设置
  ㈠、Linux客户端配置 Linux客户端和服务器端的软件是一样的,一般Linux上已经预装,可以使用#rpm -qa|grep cvs进行查询其版本,如果没有,请到网站上下载cvs-1.11.1p1.tar.gz解包安装,然后设置环境变量CVSROOT:
  $export CVSROOT=:pserver:你的用户名@192.168.1.12:/cvsroot
你也可以把这行放到你的shell的profile里(.bash_profile,.profile等),这样就不用每次敲一长串命令了。
  登陆CVS服务器:
  $cvs login
  这时候cvs 会问你口令,请把你在 CVS 服务器上的口令敲进去Passwd:xxxxxxxx 客户端设置完成。
  ㈡、Windows平台客户端配置
  首先安装支持平台软件\Python-2.2.1
  然后安装客户端 wincvs(Windows下客户端)的配置
  启动wincvs,在Admin菜单中选择preferences然后在general页中设置CVSROOT。验证方式选择:
  pserver
  路径/cvsroot
  主机:192.168.1.12
  用户:suntest(这是我开的帐户,大家也可以使用,密码也是suntest)
  CVSROOT:项如下所示:
  suntest@192.168.1.12:/cvsroot
  执行Admin菜单中的login,在提示框中输入口令,如果在Output窗口出现以下提示:

*****CVS exited normally with code 0*****
  0就表示现在可以在Windows下使用cvs服务了。

二、客户端管理

登录成功后,如何使用wincvs把自己的项目加到cvs中去。建立一个新的CVS项目,比如叫 cvstest:

首先在Create项中选择Import module目录,改变默认工作路径到当前工作路径(本地源代码目录)。确认你想加入的源文件全部在一个目录下。这个目录仅仅应当包含源文件,不应有其它任何的可执行体、*.O,*.class...等类型的文件。

其次在wincvs“Modules”窗口中把包含你的源文件的目录选中,然后在菜单“Create”->”Import moudule”下选择目录,把它导入CVS在文件过滤之后点击继续,在Import setting设置项中填入如下几项,如:

目录文件名:cvstest

开发商标记:CyberHome

版本标记:V_0_0_1

进入信息:Hello!

CVS客户端提示信息如下:

Filtering 'F:\cvstest'...

Filtering 'F:\cvstest'...

Filtering 'F:\cvstest'...

cvs import -I ! -I CVS -W "*.dll -k 'b'" -m Hello! cvstest WiLAN V_0_0_1 (in directory F:\cvstest)

N cvstest/jfb_client.ini

N cvstest/pbsys60.dll

N cvstest/pbvm60.dll

N cvstest/setup.ini

N cvstest/hello.c

N cvstest/inputtest.c

N cvstest/leap.c

No conflicts created by this import

*****CVS exited normally with code 0*****

其它相关的内容请看wincvs文档。

这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目文件cvstest删除。试验一下如何从仓库获取文件。

在运行下面的命令:在菜单“Create”->” Checkout moudule”下选择目录,选择CVS服务器端的文件名cvstest,导出到当地的文件名如F:\cvstest。提示信息如下所示:

cvs checkout -P cvstest (in directory F:\cvstest)

cvs server: Updating cvstest

U cvstest/hello.c

U cvstest/inputtest.c

U cvstest/jfb_client.ini

U cvstest/leap.c

U cvstest/pbsys60.dll

U cvstest/pbvm60.dll

U cvstest/setup.ini

*****CVS exited normally with code 0*****

更新选择($cvs checkout cvstest如果做过,输入$cvs update) 在菜单“Modify”->”Update selection”下确认,提示信息如下所示:

从仓库中检索出cvstest项目的源文件。

如果你已经做过一次checkout了,那么不需要重新checkout,只需要进入cvstest项目的目录,更新一把就行了

cvs update -P (in directory F:\cvstest\cvstest\)

cvs server: Updating .

*****CVS exited normally with code 0*****

如果你要选择具体细节,可进行参数设置。若你不直接更新,只是想看看有没有更新的东西,那么($cvs status) 在菜单“Query”->”Status”下确认,这时后会打印出一长串状态报告(你可能需分页显示,或者定向到一个输出文件里慢慢看。),对项目中的每个文件有一份状态报告,提示信息如下所示:

cvs status (in directory F:\cvstest\cvstest\)

cvs server: Examining .

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

File: hello.c Status: Up-to-date

Working revision: 1.1.1.1

Repository revision: 1.1.1.1 /cvsroot/cvstest/hello.c,v

Sticky Tag: (none)

Sticky Date: (none)

Sticky Options:(none)

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

File: inputtest.c Status: Up-to-date

Working revision: 1.1.1.1

Repository revision: 1.1.1.1 /cvsroot/cvstest/inputtest.c,v

Sticky Tag: (none)

Sticky Date: (none)

Sticky Options:(none)

...

*****CVS exited normally with code 0*****

这里最重要的就是 Status 栏,这里总共可能有四种状态:

Up-to-date:表明你要到的文件是最新的。

Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新。

Needing Patch:表明有人已经修改过该文件并且已经提交了!你的版本比仓库里的旧。

Needs Merge:表明你曾经修改过该文件,也有其它人修改了这个文件,而且还提交给仓库了!

如果你只是想保持软件的同步的话,那么上面的东西就足够用了。可是如果多人协作开发项目的话,可就不是了这么简单了.当你参加项目,维护文件时,就需要更多命令,比如说你我都是cvstest 项目的开发人员:

1,我对某个文件做了修改,比如说改了hello.c,加了一行程序:printf("This is WiLAN Web!\n");

改完之后把修改提交给仓库,用命令($cvs commit -m "add a hint!" hello.c)在菜单“Modify”->”Commit”下确认,让cvs帮你检查哪个文件需要提交。

2,当我再一次修改该文件后,可能我先查看一下现在状态($cvs status),这时候我会看到:

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

File: hello.c Status: Locally Modified

Working revision: 1.2

Repository revision: 1.2/cvsroot/cvstest/hello.c,v

Sticky Tag: (none)

Sticky Date: (none)

Sticky Options:(none)

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

如果我没有查看现在状态就做更新,而你已经做了修改并且进行提交,就会出现如下提示:

cvs update -P (in directory F:\cvstest\cvstest\)

cvs server: Updating .

RCS file: /cvsroot/cvstest/hello.c,v

retrieving revision 1.2

retrieving revision 1.3

Merging differences between 1.2 and 1.3 into hello.c

rcsmerge: warning: conflicts during merge

cvs server: conflicts found in hello.c

C hello.c

*****CVS exited normally with code 0*****

如果我没有查看现在状态就做提交。出现如下提示:

cvs commit -m "suntest update!" (in directory F:\cvstest\cvstest\)

cvs commit: Examining .

cvs server: Up-to-date check failed for `hello.c'

cvs [server aborted]: correct above errors first!

这说明确实人在我修改此文件的时候也做了修改,并且做了提交。

查看一下现在状态,提示如下:

cvs status (in directory F:\cvstest\cvstest\)

cvs server: Examining .

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

File: hello.c Status: Needs Merge

Working revision: 1.2

Repository revision: 1.3/cvsroot/cvstest/hello.c,v

Sticky Tag: (none)

Sticky Date: (none)

Sticky Options:(none)

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

解决办法就是重新编辑hello.c,这时一般文件里看起来象这样。

<<<<<<< hello.c

printf("I am a designer!\n");

=======

printf("The sentence is right.\n");

>>>>>>> 1.3

于是我把上面改成:

printf("I am a designer!\n");

printf("The sentence is right.\n");

然后提交,提示如下:

cvs commit hello.c (in directory F:\cvstest\cvstest\)

Checking in hello.c;

/cvsroot/cvstest/hello.c,v <-- hello.c

new revision: 1.4; previous revision: 1.3

done

*****CVS exited normally with code 0*****

我这里没有更新,直接做了提交,若是更新,下回你再更新的时候就有新的补钉要打,如此往复,直到完成所有修改。

不过这里有一些要注意的地方就是删除程序,如果你删掉一行对你可能没有用的程序。而我不想删除(因为我有用),而我不知情地直接更新,那么我的那行程序也完蛋了,所以这里我们要注意所有开发人员的协调,千万不要乱删东西,大不了用注释符号括起来。实在要删东西,那最好先标记一个版本($cvs tag v_0_0_1)然后你可以发布并删除你自己的工作目录里这个版本的文件($cvs release -d cvstest注意不是删除仓库里的)。然后你再生成一个新分支($cvs rtag -b -r v_0_0_1 v_0_0_1_1 cvstest)然后再建立v_0_0_1_1的分支($cvs checkout -r v_0_0_1_1 nasdaq )编辑并修改这个分支的文件,这样的做法比较好。

不过要注意的是,新标记和新分支的建立最好由项目的管理人员负责,否则每个人都做一个分支,那么仓库就太乱了。因此,比较的开发人员之间的直接沟通是不能忽略的。一般来说,在互联网上的标准模式是有一个管理员(可能自己并不写程序),有一个邮递列表,大家都在邮递列表上交流看法和做各种决议。当形成决议之后,管理员做一个新版本的标记。以此循环。

还有一些命令,比如要增加一个文件 stocks_list:($cvs add stocks_list)然后还要:($cvs commit stocks_list)看起来有点象数据库里的事务?的确是这样。CVS维护着一个本地的参考文件(在CVS/Entries里),这样提交的时候就可以一次地把所有改变放到服务器端,这样也更安全。同样,如果想删除文件 web_site:($rm web_site $cvs remove web_site $cvs commit web_site)。

好了,上面所有的东西,可能就是我们用cvs时大部分用的命令和内容,包括文件的更新,提交,冲突的解决,分支的派生,增删文件等。当然,还要更多地参考别的文档。你若发现有不对之处请及时通知我,我将及时更改。

 

    【打印本稿】  【给我留言】

| 友情链接 | 网园导航 | 关于网园 | 联系网园 |
网园工作室(CyberHome Workroom) / 远山百合(Farhill&Lily) 陕ICP备05016083
Copyright©2003-2007, cyberhome.cn  All Rights Reserved.