CVS Quick Start

CVS Quick Start 

update

04/20/08 21:22 by manio

04/20/08 16:17 by manio

 

 

CVS是一个开源的软件开发版本控制软件

QUOTE:

CVS Concurrent Version System(并行版本系统)的缩写,用于版本管理.如果大家曾经参与过多人协作开发的项目,大家肯定有这样的痛苦经历:由于多个人同时修改同一个文件, 自己辛辛苦苦修改的程序被别人彻底删除了.另外,如果你的软件/程序已经发布了三个版本, 而这时候用户需要你修改第二个版本的东西,也许你会因为只保留了最新版本而痛哭流涕。还有就是你对程序做了一些修改,但是修改很少,你只想给远方的同事发一个两个版本之间的差别文件,这样可以免于邮箱不够大,网速太慢之类的问题.为了解决类似这样的问题,以及诸如生成补丁文件,历史版本修改等,一帮黑客(褒义)在原先 Unix 体系里很成熟的 SCCS RCS 的基础上,开发了 CVS(SCCSSource Code Control SystemRCSRevision Control System)。

 

它的工作模式如下:

开始时将一个本地的工程import(类似于上传)到服务器,多个人协同编程时,每个人check out(类似于下载)一人工作版本到本地,在本地修改,改好之后,commit(提交最新版本)到服务器.

也可以用CVS来管理一些未整合的单独的模块开发.

 

Tutorial:

1.         安装CVS

2.         安装gcvs(GUICVS客户端)—这东西暂时不用

3.         配置CVS

4.         初始CVS工作目录

5.         import一个项目(将一个项目导出到服务器)

6.         checkout (下载版本文件)

7.         代码写好了?那么快?

8.         增加文件

9.         删除文件

10.     更新文件

 

 

 

 

如果CVS已经配置好或在远程使用CVS,可以直接从第6步开始

1.     安装CVS

服务器和客户端都要这样安装

WINDOWS下同样可以使用,http://www.cvsnt.org/下载WINDOWSCVS

sudo apt-get install cvs

 

2.     安装gcvs(GUICVS客户端)—这东西暂时不用

sudo apt-get install gcvs

 

3.     配置CVS与登陆

编辑cvsd的配置文件,配置RootJail

 RootJail是指CVS根目录,CVS中用到的目录都是相对于RootJail的相对路径

#sudo vim /etc/cvsd/cvsd.conf

缺省的应该是:

RootJail /var/lib/cvsd

Repos /myrepos

改成

RootJail /home/manio

Repos cvsroot

注意此处的Repos的路径也是相对于RootJail的。

 

配置CVS工作目录

sudo vim ~/.profile

 

如果是在本地使用在文件中加入

CVSROOT=~/cvsroot   #也可以是其他目录名,最好是自己用户文件夹下

记住,不要自己进入此目录下修改文件,这会搞乱CVS配置

 

如果是远程使用,则在文件中加入

CVSROOT=:pserver:manio@10.62.78.159:/cvsroot   #也可以是其他目录名,最好是自己用户文件夹下

pserverCVS集成的一种SERVER的模式

manio是这个代码仓库下的一个用户名

10.62.78.159是远程服务器的IP

cvsroot是相对于RootJail的相对路径名(RootJail在服务器上设置)

 

此后,

logout

login

echo $CVSROOT

可以看到输出/home/manio/cvsroot

如果是在远程登陆,则要以下命令登陆(如果是本地则不用,包括telnet)

cvs login

 

4.     初始CVS工作目录

cvs init

之后可以看到/home/manio/cvsroot目录下多了一个CVSROOT目录,里面有一些配置文件.

5.     import一个项目(将一个项目导出到服务器)

比如我在/home/manio/manioTinyProgram上有一个工程的代码,使用下面的命令把他导出到服务器上,这样以后就可以从这个版本使用CVS做后面的软件工程的管理.

cvs import -m "here is any message to mark this project" manioTinyProgram vendortag releasetag

-m指定一些这个版本的备忘信息

myproject是给这个项目在CVS中起的名字

vendortag是产家的标签,MANIO

releasetag是发行版本标签,version1

 

这之后就可以在/home/manio/cvsroot下看到原来是在/home/manio/manioTinyProgram里的文件了

现在,项目就已经交给CVS去管理了.

6.     checkout (下载版本文件)

现在要从服务器上的版本开始,在此基础上编写新的代码!

开始前先在本地任意自己舒服的地方建一个文件夹,用于存放这次的工作版本

:

mkdir /home/manio/tmp

然后

cd /home/manio/tmp

cvs checkout manioTinyProgram

这时, manioTinyProgram是刚才在第5步里使用的项目名称

此后,就可以在tmp文件夹下看到manioTinyProgram文件夹,里面就是之前传到服务器上的那些文件,只是多出来一个文件夹CVS,里面是一些配置文件.

 

此时,就可以在这个文件夹下写代码...调试...WHATEVER YOU WANT EVEN......

 

7.     代码写好了?那么快?

代码写好了之后,本地也调试好没问题了,就可以commit到服务器了.就算是错误的版本,你也可以提交试试,不用怕,CVS能找回以前对的版本.这就是为什么使用CVS的原因.

cd /home/manio/tmp/manioTinyProgram

cvs commit –m “Manio changed file 00Readme.txt”

运行后会看到

cvs commit: Examining .

cvs commit: Examining batRenameShell

cvs commit: Examining creatFlatHmm

cvs commit: Examining fromserver

cvs commit: Examining include

cvs commit: Examining lineSorter

cvs commit: Examining taghandler

cvs commit: Examining wordcounter

/home/manio/cvsroot/myproject/00Readme.txt,v  <--  00Readme.txt

new revision: 1.2; previous revision: 1.1

CVS帮我们把版本号做了修改.提示ooReadme.txt做了修改

8.     增加文件

比如现在,我做好了一个小模块(包含文件manioModule.c manioModule.h),要加入我们的大工程里面

将文件放到工作版本的合适目录下

cp manioModule.c manioModule.h /home/manio/tmp/manioTinyProgram

cd /home/manio/tmp/manioTinyProgram

 

使用

cvs add manioModule.c manioModule.h

告诉本地CVS我增加了这两个文件

 

使用

cvs commit -m "manio add two file:manioModule.c manioModule.h" manioModule.c manioModule.h

系统会输出:

/home/manio/cvsroot/manioTinyProgram/manioModule.c,v  <--  manioModule.c

initial revision: 1.1

/home/manio/cvsroot/manioTinyProgram/manioModule.h,v  <--  manioModule.h

initial revision: 1.1

 

9.     删除文件

刚才加上去文件不想要了,使用下面的命令

rm manioModule.h

cvs remove manioModule.h

系统输出:

cvs remove: scheduling `manioModule.h' for removal

cvs remove: use `cvs commit' to remove this file permanently

这时已经告诉本地CVS我已经删除了这个文件

 

使用下面的命令把本地的修改提交给远程服务器

manio@manio-desktop:~/tmp/manioTinyProgram$ cvs commit -m "manio deleted manioModule.h" manioModule.h

系统输出提示信息

/home/manio/cvsroot/manioTinyProgram/manioModule.h,v  <--  manioModule.h

new revision: delete; previous revision: 1.1

上面提示了对远程服务器的更改

 

10. 更新文件

这里使用的命令为update,它将比较指定的在CVS源码库中的文件和当前目录下的文件,如果CVS源码库中有更高版本的源文件,则更新当前目录下的文件。

如果其他人在服务器上更新了文件,可以使用此命令来更新本地工作目录中的内容

cvs update filename

 

 

Digest

l         增加用户:

#sudo cvsd-passwd /var/lib/cvsd/myrepos cvsusername

 

/var/lib/cvsd/myrepos是服务器设定的代码仓库的路径,此命令给且只给此仓库增加一个名为cvsusername的用户.

 

l         设置目录权限。

#sudo chown cvsd:cvsd /var/lib/cvsd -R

 

l         重新启动cvsd

#sudo /etc/init.d/cvsd restart

 

 

登陆windowsCVS服务器

manio@manio-desktop:~$ cvs -d :pserver:manio@10.62.78.108:/ForXP/KHRoot login

manio@manio-desktop:~/manioTinyProgram$ cvs -d :pserver:manio@10.62.78.108:/ForXP/KHRoot import -m "testwincvsnt" manioTiny1 manio version

 

 

查看状态

cvs status filename
状态报告,类似这样: 

File:
 foo.c             Status: Up-to-date 
    Working revision:    1.1.1.1 'Some Date' 
    Repository revision: 1.2     /home/cvsroot/cvstest/foo.c,v 
    Sticky Tag:          (none) 
    Sticky Date:         (none) 
    Sticky Options:      (none) 

这里最重要的就是Status栏,这里总共可能有四种状态:
Up-to-date
表明你要到的文件是最新的
Locally
 Modified 表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.
Needing
 Patch 表明有个哥们已经修改过该文件并且已经提交了!你的版本比仓库里的旧.
Needs
 Merge 表明你曾经修改该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交了!

[编辑]

查看修改历史和注释信息

cvs log file_name

 

 

正确的通过CVS恢复旧版本的方法:

如果用cvs update -r1.2 file.name

这个命令是给file.name加一个STICK TAG "1.2" ,虽然你的本意只是想将它恢复到1.2版本

正确的恢复版本的方法是:cvs update -p -r1.2 file_name >file_name

如果不小心已经加成STICK TAG的话:用cvs update -A 解决

 

 

尽信书则不如无书,还是得自己摸索啊。摸了好几天,感觉网上的帖子都是国画,写意为主,仔细品位,还是一头雾水,所以写一个详细一点的吧。很佩服国外的一些帖子,即使是发问,也会写清楚:我参考了哪些网站,如何操作的,出现什么问题~~扯远了。

1.
安装CVS,在新立得包管理器里面选中cvs(系统-系统管理-新立得软件包管理器,在右边的软件包列表中随便选中一个,然后键盘上按cvs这三个字母,就会定位到以这三个字母开头的软件包),然后点击鼠标右键,在菜单中选中标记以便安装。然后点击上方工具栏中的应用,系统会自动下载包,然后安装。

2.
安装CVSD,同上,选中cvsd,安装。安装cvsd后,会提示设置repository的位置,这个地方只要输入相对于RootJail的位置就可以。RootJail/etc/cvsd/cvsd.conf中进行设置,缺省的RootJail/var/lib/cvsd。也就是说,在这一步里面输入/myrepos就可以了。

3.
打开一个命令行窗口,创建这个/myrepos
#cd /var/lib/cvsd
#sudo mkdir myrepos

4.
初始化这个/myrepos
#sudo cvs -d /var/lib/cvsd/myrepos init

5.
设置cvsd的用户认证方式,缺省的是系统级的,一般来说cvs的用户都是单独设置的。
#sudo gedit /var/lib/cvsd/myrepos/CVSROOT/config
添加以下几行:
SystemAuth=no
PamAuth=no
LockDir=/tmp/myrepos
然后保存退出。注意此处的/tmp/myrepos是指相对于RootJail的路径。

6.
创建LockDir
#sudo mkdir /var/lib/cvsd/tmp/myrepos

7.
添加用户
#sudo cvsd-passwd /var/lib/cvsd/myrepos cvsuser

8.
编辑cvsd的配置文件,配置那个该死的RootJail
#sudo gedit /etc/cvsd/cvsd.conf
缺省的应该是:
RootJail /var/lib/cvsd
Repos /myrepos
注意此处的Repos的路径也是相对于RootJail的。
另外,如果有些变态的网管喜欢封端口的话,这里可以设置cvsd的监听端口,比如可以改缺省的2401端口为8080
Listen * 8080

10.
设置目录权限。
#sudo chown cvsd:cvsd /var/lib/cvsd -R

11.
重新启动cvsd
#sudo /etc/init.d/cvsd restart

12.
eclipse或者其他的cvs客户端中配置使用此cvs服务器。
connection type:pserver
host:your ip
port:8080
repository path:/myrepos
user:cvsuser

其实这个cvsd的安装,主要是参照它的README,只不过它是一个压缩文件,一开始没想解开看看而已。/usr/share/doc/cvsd/README.gz

 

 

 

 

开始一个新的里程碑

cvs commit -r 2
标记所有文件开始进入2.x的开发
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。

 

修改文件名

移动文件:文件重命名
cvs
里没有cvs movecvs rename,因为这两个操作是先cvs remove old_file_name,然后cvs add
new_file_name
实现的。

[编辑]

目录结构同步

如果在你checkout后,有人添加了新的文件或目录,你需要把他们取出来
cvs update -d

[编辑]

放弃本地的修改(undo)

如果修改来了本地文件,不想提交,想重新取新文件
cvs update -C filename
它会先把你的本地文件改名

   建议:建议大家把checkout的文件缺省为readonly,"cvs -r"添加到~/.cvsrc文件中

    这样,你每次修改一个文件前,先cvs edit filename,提交后文件又变成readonly,

          如果你想放弃本地的修改,则cvs unedit filename,它会undo,而且文件又变成readonly

恢复到旧版本

cvs update -j1.20 -j1.15 filenames

1.20时当前版本号,注意顺序不要反了,记住要commit,为了保证是但前版本号,最好先lock

注意:cvs update -r1.15 file.name,这里的-r不是版本号的意思,是给文件加了一个叫1.15sticky tag

如果不小心已经加成STICK TAG的话:用cvs update -A 解决

 

 

 

 

 

 

 

 

 

 

更多信息请参考

CVS来管理自己的程序http://www.uml.org.cn/pzgl/pzgl26.htm(本文主要出自此处,是此文的精简版,原文中有一些错误)

http://fedora.gro.clinux.org/docs/documentation-guide-zh_CN/ch-cvs.html

CVS使用手册http://www.chedong.com/tech/cvs_card.html

 

当然,CVS不止这样简单的功能,它还是使软件开发出现分支,下面是一个例子:

我们为湖大开发一个软件,当我们做到1.0版时,湖大拿去正式使用了,而我们还在做2.0,3.0……但是,当我们做到3.0,湖大跟我们讲1.0版有一个BUG.这时,不能把3.0版给湖大用,因为这个版本在实际安装过程中可能什么出现更多的问题,这些问题的解决要大量时间.最好的方法是给1.0版本做一个patch,这里,1.0版就出现了一个分支,可能对1.0版做Npatch….

 

相关网站:

http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/

 

 

CVS--并行版本系统

http://www.soforge.com/cvsdoc/zh_CN/book1.html

 

CVS 免费书:

http://cvsbook.red-bean.com/

 

CVS命令的速查卡片 refcards.com/refcards/cvs/

 

WinCVS:

http://cvsgui.sourceforge.net/

 

CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS

http://www.cvstrac.org

 

StatCVS:基于CVS的代码统计工具:按代码量,按开发者的统计表等

http://sourceforge.net/projects/statcvs

 

 

如何在WEB开发中规划CVS上:在Google上查 "cvs web development"

http://ccm.redhat.com/bboard-archive/cvs_for_web_development/index.html

 

一些集成了CVSIDE环境:

Eclipse

Magic C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值