虹天软件招聘软件测试工程师

什么是CVS

上一篇 / 下一篇  2008-04-08 17:54:09

 

一、什么是CVS?

CVS

――Concurrent Versions System并行版本系统;
是一个标准的版本控制系统;
对代码进行集中管理;
记录代码所有的更改历史;
提供协作开发的功能;
支持多人同时CheckOut与合并。
以客户端/服务器模式工作,所有的用户都在客户端进行CVS操作,而所有命令的执行都在CVS服务器端进行。 

 

 

二、CVS基本概念

  1. CVS仓库:又称主拷贝,是CVS系统保存软件资源的地方。所有项目的所有文件的所有版本都保存在这个仓库中。 
  2. 版本:开发人员每次向CVS提交所做的修改就形成了一个新版本。 
  3. 工作拷贝:从CVS服务器端取出的,保存在我们正在使用的客户端计算机上的代码拷贝。每个人员都有一个属于自己的工作拷贝。 
  4. 检出代码(创建工作拷贝check out):从服务器取出代码,就是创建工作拷贝的过程。 
  5. 提交代码(commit):将代码送到服务器保存,commit又叫作check in。 
  6. 导入代码(import):将未被CVS进行版本管理的代码引入CVS系统中,由CVS开始对它进行版本管理。 
  7. CVS日志:CVS用来记录每次操作的内容的信息。日志信息可以用cvs log命令来查看。 
  8. 更新(update):在协同开发环境下,将其他人所作的最新修改从CVS仓库中取到你的工作拷贝中,从而使得你得工作拷贝与仓库中得最新版本保持一致。使用update是同步各个工作拷贝的手段。 
  9. 冲突(conflict):在协同开发的环境下,当两个开发人员对同一个文件进行修改,并且依次提交CVS仓库时就发生了冲突。这种冲突需要开发人员手工消除,并提交到CVS仓库中形成解除冲突之后的新版本。 

三、CVS命令:

1.

设置环境变量。 
set CVSROOT=:pserver:xxx@192.168.0.226:e:/cvsroot

set CVSROOT=:pserver:xxx@ansi.3322.org:e:/cvsroot

2.签出工作版本到工作目录。 
$cd

$cvs  co  account/src/common
该命令只将account/src/common目录结构签出到本地。若使用 
$cvs co account
则将account下所有目录结构签出来。 

3.

提交修改的文件到CVS版本库中: 
$cvs  ci  <filename>
注意若提交多个文件可以输入多个文件名,并以空格分开。若将该目录下所有文件都提交,那么只需 
$cvs  ci <回车>
即可。 

4.

提交新增加的目录或文件到CVS版本库中: 
$cvs  add  <dirname>

$cvs  ci  <dirname>

$cvs  add  <filename>

$cvs  ci  <filename>

5.

删除目录及文件,需先删除目录下的文件 
$rm  <filename>

$cvs  remove  <filename>

$cvs  ci  <filename>
 
再执行 
$cd ..
$cvs up –P

则将该空目录删除(只是删除本地工作拷贝的空目录)。 

6.

查看文件状态 
$cvs status <filename>

例如: 
$ cvs st ffun.c

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

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

   Working revision:    1.1     Wed Nov  6 11:29:04 2002

   Repository revision: 1.1     /szunicom/dev/billing/src/preproc/CDMA/ffun.c,v

   Sticky Tag:          (none)

   Sticky Date:         (none)

   Sticky Options:      (none)

注意:最重要的是Status栏,可以有以下几种状态: 

Up-to-date

:表明你的工作拷贝是最新的. 
Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新. 
Needing Patch:表明有人已经修改过该文件并且已经提交了!你没有修改但你的工作拷贝的版本比仓库里的旧. 
Needs Merge:表明你修改了该文件但没有提交,而有人也修改了这个文件,并且提交给仓库了。 

Locally added

:表明使用了"add"命令增加了该文件,但还没有"commit" 

Locally Removed

:表明你使用了"remove"命令,但还没有"commit" 

Unkown

:CVS不知道关于这个文件的情况.例如,你创建了一个新文件,而没有使用"add"命令 
解决办法:
若状态为Locally Modified,则需执行$cvs ci <filename>
若状态为Needing Patch或Needing Merge,则需执行$cvs up <filename>
将版本库里的文件与工作拷贝合并后,再提交给版本库,使用命令: 

$cvs ci <filename>


若状态为:Locallyadded,则需执行$cvs ci <filename>
若状态为:Removed,则需执行$cvs ci <filename>
若状态为:Unkown,则需执行$cvs add <filename>,$cvs ci <filename>。 

7.

查看工作拷贝和仓库中最后版本之间的修改 
$ cvs diff src.c

8.

查看指定的两个版本之间的修改 
$ cvs diff -r 1.1 -r 1.2 <filename>

9.

版本回退(取出以前的某个版本)
有两种方式:
一是只把某一版本的文件输出到标准输出上: 
$cvs up –p –r <版本号> <filename>

“-p”选项让CVS命令的结果只输出到标准输出,而不写入到结果文件中。 

 

另一种是将输出到标准输出的结果重定向到文件中: 
$cvs up –p –r <版本号> <filename> > <filename>

如:目前abc.c文件的版本号为1.5,要取出1.2的版本,那么执行 
$cvs up –p –r 1.2 abc.c > abc.c

若没有使用“-p”选项进行回退,而是使用了$cvs up –r 1.2 abc.c命令,之后若对1.2版本进行修改后再提交到CVS时,会出现如下提示信息: 
cvs ci

cvs commit: Examining .

cvs commit: sticky tag `1.2' for file `abc.c' is not a branch

cvs [commit aborted]: correct above errors first!

 

解决办法两种方式: 

1

、修改CVS/Entries文件,将以下黄色标记部分删除即可。 
$cd CVS

$ vi E*

/abc.c/1.2/Tue Dec 17 13:33:06 2002//T1.2

D

~

~

2、使用$cvs up –A abc.c命令来消除附着标签,但是该命令是将1.2版本与最新版本进行了合并,还需对abc.c进行修改再重新提交。 

10.

如何恢复已经删除的文件或目录: 
1. 在执行了【Remove】命令之后恢复文件。 ◇ 【Ctrl+L】直接输入命令cvs add xxxxx,或执行【Add Selection】界面操作。 ◇ 这样就可以直接恢复还未提交的删除文件。 
2. 在执行了【Commit】命令之后恢复文件。 ◇ 只能用【Ctrl+L】直接输入命令cvs add xxxxx,这时会得到一个空的文件。 ◇ 选中这个空文件,执行【Update】操作,得到这个文件的实体。 ◇ 再次选中这个文件,执行【Commit】操作,得到这个文件最新版本。 
3. 由于CVS系统中本质上不会删除任何目录,因此,谈不上对目录的恢复,但是CVS系统默认情况下是要在用户本机上(如:YCW2000)要删除空目录,因此,可以用如下方法得到已被删除的空目录:cvs checkout -p xxx,也可以在Admin=>Preference的【Globals】页面进行设置。

TAG:

 

评分:0

我来说两句

日历

« 2024-05-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 19734
  • 日志数: 33
  • 书签数: 3
  • 建立时间: 2008-04-03
  • 更新时间: 2012-01-19

RSS订阅

Open Toolbar