参考网址:

http://baike.baidu.com/view/20982.htm

CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。

CVS系统简介  CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在 开源软件管理中使用。与它相类似的代码 版本控制软件有 subversion。

工作模式

  CVS服务器( 文件版本库)   CVS(Concurrent Versions System)版本控制系统是一种GNU 软件包,主要用于在多人开发环境下的源码的维护。Concurrent有并发的、协作的、一致的等含义。实际上CVS可以维护任意文档的开发和使用,例如共享文件的编辑修改,而不仅仅局限于程序设计。CVS维护的文件类型可以是文本类型也可以是二进制类型。CVS用Copy-Modify-Merge(拷贝、修改、合并)变化表支持对文件的同时访问和修改。它明确地将源文件的存储和用户的工作空间独立开来,并使其并行操作。CVS基于 客户端/服务器的行为使其可容纳多个用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的 源代码)时的首选。   所有重要的 免费软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括GNOME、KDE、THE GIMP和Wine等。

CVS的基本工作思路

  在一台服务器上建立一个源代码库, 库里可以存放许多不同项目的源程序。由源代码库 管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,最后用CVS命令进行提交,由CVS源代码库统一管理修改。这样,就好像只有一个人在修改文件一样,既避免了冲突,又可以做到跟踪文件变化等。   CVS是并发版本系统(Concurrent Versions System)的意思,主流的开放源码网络透明的版本控制系统。CVS对于从个人开发者到大型、分布团队都是有用的。   它的客户机/服务器存取方法使得开发者可以从任何因特网的接入点存取最新的代码。它的无限制的 版本管理检出(check out:注1)的模式避免了通常的因为排它检出模式而引起的人工冲突。它的客户端工具可以在绝大多数的平台上使用。   CVS被应用于流行的开放源码工程中,像Mozilla,GIMP,XEmacs,KDE和GNOME等。那么它到底怎么样?   你可能会说,它非常棒,但是对于"我"来说它能做什么?首先,基本的 :一个版本控制系统保持了对一系列文件所作改变的历史记录。对于一个开发者来说,那就意味着在你对一个程序所进行开发的整个期间,能够跟踪对其所作的所有改动的痕迹。对你来说,有没有出现过由于在命令行上按错键而导致一天的工作都白费的情况呢?版本控制系统给了你一个安全的网络。   版本控制系统对任何人都有用,真的。(毕竟,谁不愿意使用一个安全的网络呢?)它们经常被软件开发团队使用。在团队中工作的开发者需要能够调整他们的各自的修改;一个集中式版本控制系统允许那样做。

代码集中的配置

  个人开发者希望一个版本控制系统的 安全网络能够运行在他们的本地的一台机器上。然而,开发团队需要一个集中的服务器,所有的成员可以将服务器作为仓库来访问他们的代码。在一个办公室中,没有问题 --只是将仓库连到本地网络上的一台服务器上就行了。对于开放源码项目…噢, 还是没有问题,这要感谢因特网。CVS内建了客户机/服务器存取方法,所以任何一个可以连到因特网上的开发者都可以存取在一台CVS服务器上的文件。

调整代码

  在传统的版本控制系统中,一个开发者检出一个文件,修改它,然后将其登记回去。检出文件的开发者拥有对这个文件修改的排它权。没有其它的开发者可以检出这个文件 -- 并且只有检出那个文件的开发者可以登记(check in:注2)所做的修改。(当然对于管理员有很多方法可以超越这个限制。)   想一下排它的检出可能会如何工作:Bob的兄弟检出 foo.java以便加入注释,写好代码后他什么也没做。然后他去吃午饭了。Bob吃完午饭后,发现他的老板所指给他的一个bug在 foo.java里。他试图检出 foo.java … 但是版本控制系统不允许他这样做,因为他的兄弟已经把它检出了。Bob不得不等着他的兄弟吃完午饭回来(在这个"好"日子用了两个小时),他才可以修正bug。   在一个大型的开放源码工程中,因为开发者可能在任意的时区工作得很晚,给予一个开发者阻止任意地方的其它开发者继续处理任意文件的能力很明显无法运转。他们最终将因为不能够在他们想要的时候开展项目而感到厌烦。   CVS通过它的无限制的检出模式解决了这个问题。检出一个文件并不给定开发者对那个文件的排它权。其它的开发者也可以对其检出,进行他们自己的修改,并且将其登记回去。   "等一下!"你可能会说。"但是后面的登记不是会覆盖前面的吗?"回答是不会。详细地回答就是当多个开发者对同一个文件作了修改CVS会检测,并且自动合并那些改变。   哇噢。自动的?不用担心 -- CVS 会很小心,并且将会自动合并那些只要不是对代码的同一行所作的改动。如果CVS不能安全的处理这些改动,开发者将不得不手工合并它们。从此去往何处?   有大量在许多平台上可用的CVS附加工具,它们给CVS增加了功能或使得CVS更容易使用。

使用CVS的好处

  ·修改 软件时可能会不知不觉混进一些 bug,而且可能过了很久你才会察觉到它们的存在。有了 cvs,你可以很容易地恢复旧版本,并从中看出到底是哪个修改导致了这个 bug。有时这是很有用的。   ·cvs 用一种聪明的办法把一个文件的所有版本保存在一个文件里,仅仅保存不同版本之间的差异。   ·cvs 最初由 Dick Grune 在 1986 年 12 月以 shell 脚本的形式发布在 comp.sources.unix 的新闻组第 6 卷里;1989 年 4 月,Brian Berliner 设计了 cvs 并编写了代码。之后 Jeff Polk 帮助 Brian 设计了 cvs 模块和销售商分支支持。   ·cvs 不能指导你如何构造什么。它只是将你所设计的一种树结构文件保存下来以备恢复之用。   ·cvs 不能决定如何在一个检出工作目录使用磁盘空间。如果你在每一个目录中都写下 Makefile 或脚本,且必须知道其它一切的相对位置,有时不得不检出整个仓库。   ·如果你将你的工作模块化,并且建立了一个共享文件的 build 系统(通过links,mounts,Makefiles 里的 VPATH 等),你就可以随意安排磁盘的使用。   ·你应该在 cvs 下放一个工具来支持这样一个 构造系统(脚本、Makefile 等等)。   ·有些变化发生在 cvs 范围之外时,要想想什么文件需要重建。一个传统的方法是用 make 来构造,并用一些自动化的工具来产生 make 所用的相关文件。

cvs 不能替代管理

  你的经理和项目负责人应经常与你交流以确保你时时记得进度表、合并点、分支名和发布日期。如果他们不这样做,cvs 也没用。cvs 只是一个用来使你的资源与你的步调一致的工具。但你是风笛手和 作曲家,没有哪种乐器会自己演奏或是作曲。   ·cvs 不能代替开发者之间的交流。   在单个文件内遇到冲突时,大多数开发者不费多大力气就能解决它们。但更常见的"冲突(conflict)",是那些难度较大、不在开发者之间进行交流就没法解决的问题。   当在一个文件内或多个文件中同时发生变化时,cvs 并不知道何时它们会在逻辑上发生冲突。它的冲突(conflict)概念是纯粹文本意义上的,这种冲突会在同一个文件的两种变化十分接近以致于会破坏合并命令(如 diff3)。   cvs 决不会指出程序逻辑上非文本或分布式的冲突。例如:假如你改变了在文件 A 中定义的函数 X 的参数。同时,别人在编辑文件 B,仍用旧参数调用 X 这个函数。此时产生的冲突 cvs 可就无能为力了。

cvs 没有变化控制

  变化控制可以指许多事情。首先它的意思可以是 BUG 跟踪bug-tracking,就是说它能维持一个数据库,其中包括已报告的 BUG 和每一个 BUG 状态 (是否已更正?在哪一个版本中?提交这个 BUG 的人是否认为已经更正?)。为了使 cvs 和一个外部的跟踪 BUG 系统协调一致,请参考 rcsinfo 和 verifymsg 文件 (参阅 Administrative files)。   变化控制的另一个方面指跟踪这样的情况,即对好几个文件的改变实际上只是同一个逻辑变动。如果你在一次 cvs commit 操作中检入几个文件,cvs 会忘掉它们是一起检入的,它们共用一个 LOG 信息的事实只是把它们绑在一起而已。做一个 gnu 风格的 ChangeLog 可能会有点用。在一些系统中,变化控制的另一个方面是跟踪每个变化的状态的能力。一些变化由一个开发者写出,而另一些变化则由另一个开发者来作出评论,等等。一般来讲,用 cvs 来做,是产生一个 diff(用 cvs diff 或 diff),并且用 电子邮件寄给某人,此人就可以用 patch 来应用它。这是非常灵活的,但依赖于 cvs 之外的机制以保证事情不会崩溃。

cvs 不是自动测试程序

  强制利用 commitinfo 文件测试套件应该是可能的。不过我没有听说过多少项目试图那样做或那里有微妙的陷阱。

cvs 没有内置的处理模型

  有些系统提供一些方法确保变更或发布通过不同的步骤,以及各种所需的批准过程。一般地,你可以用 cvs 来完成它,但是可能要多做点工作。有些情况下你想用 commitinfo、loginfo、rcsinfo 或 verifymsg 文件,要求在 CVS 提交之前完成某些操作。你也会考虑诸如 branches 和 tags 等特性是否能用在一个开发树中执行任务,然后仅当它们被证实就把某些修改合并到一棵稳定的树中。   CVS 还有一个更加重要的特性:能记下每个文件的每次修改,以及如何被修改…对于基于 Internet 的合作方式来说,这些特性太重要了。一个地域上分散的自愿者组织显然不可能投入很多的时间来训练其成员彼此合作。因为这样的话,当该组织有成员变更的时候,为此付出的投资将损失殆尽。所以需要指定一套基本的项目分配方案,以确保新成员能较容易的适应工作,同时也需要设置一个自动的系统来接受外来代码,并使每个成员能及时得到最新修改的代码。 CVS 中会经常提到的一些术语  Revision (修订版本)--文件历史记录中的被开发者提交的变化。一个修订版本就是一个时常变化的项目的 snapshot (瞬态图)。   Repository (源代码库)--CVS 存储所有修订版本历史记录的地方。每个项目都有自己的一个确定的源代码库。   Working copy (工作拷贝)--开发者对文件作出修改时文件所在的拷贝。   Check out (检验)--从源代码库中申请一份工作拷贝。该工作拷贝反映的是取出时项目的瞬时状态。当开发者对拷贝作出修改时,必须运用 commit (提交)和 update (更新) 命令来 “发布”变化和查看其他开发者所作的修改。   Commit (提交)--将工作拷贝中的变化输入中央源代码库。   Log message (日志信息)--提交修订版本的时候,附带描述变化的注解。通过查阅记录信息,人们可以获得一个当前项目进程的总结。   Update (更新)--从源代码库中取出别人的修改数据,将其输入自己的工作拷贝,并显示自己的工作拷贝是否有未提交的修改。注意,不要和 commit (提交)混淆,更新和提交是一对互补的指令。记住: Update 将使工作拷贝和源代码库拷贝保持同步更新。   Conflicts (冲突)--两个开发者对同一个区域所做的改动都提交给主版本时出现的情况,在 CVS 觉察并指出这个冲突后,开发者必须解决该冲突。

CVS文件

  有些文件是以CVS作为扩展名的,例如导出使用SQL数据库查询所得结果时所保存的文件,这些文件可以使用EXCEL软件打开,打开时默认的间隔符是TAB键,所以我们很方便的读写这些文件的数据。

黑盒测试之导入CVS文件之什么是CVS文件相关推荐

  1. cmd库的导入Java,在cmd命令窗口导入第三方jar包来运行java文件

    在cmd命令窗口导入第三方jar包来运行java文件,以下测试都是基于window环境,Linux环境没有测试. 1.编译 使用命令javac -cp或者javac -classpath 本机测试:如 ...

  2. 黑盒测试之边界值测试

    黑盒测试之边界值测试 边界值的定义 稍高于其边界值及稍低于其边界值的一些特定情况 边界值分析 取点 最小值.略高于最小值.正常值.略低于最大值.最大值等五个点. 边界值分析的假设 单缺陷假设原则:只有 ...

  3. 使用PHP导入Excel和导出数据为Excel文件

    有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入.另外将mysql数据导出为Excel与本站上篇文章中导出 ...

  4. 模块的四种形式 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包...

    目录 模块的四种形式 什么是模块 模块的四种形式 自定义模块 第三方模块 内置模块 包 使用模块的好处 模块的调用 循环导入问题 模块的搜索路径 py文件的两种用途 编译python文件 包 什么是包 ...

  5. MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案

    2019独角兽企业重金招聘Python工程师标准>>> MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案 MyEclipse导入jquery-1.8. ...

  6. python如何将utf-8编码文件改为ansi编码文件_Excel导入CSV文件乱码?两个小方法让文件正常显示...

    最近网友抱怨,收到别人发来的数据表,打开后长这样: CSV再EXCEL中显示为乱码 除了数字,其他是啥玩意儿 完全乱码... (乱码!乱马!乱吗?乱!) 但是当使用记事本打开,检查确认是否文件有问题时 ...

  7. csv导入mysql php实现_PHP实现csv文件导入mysql数据库的方法

    这篇文章主要介绍了PHP编程实现csv文件导入mysql数据库的方法,涉及php文件读取.转换.数据库的连接.插入等相关操作技巧,需要的朋友可以参考下 具体如下: config.db.php内容如下: ...

  8. cvs数据格式 gps_运动手表GPS轨迹文件导出方法

    运动手表GPS轨迹文件导出方法 什么是GPS轨迹文件? 记录运动轨迹是带GPS运动设备最基本的功能,记录轨迹后才能计算配速(速度).距离,间接数据还有步幅.最大摄氧量等数据.带GPS功能运动设备比较常 ...

  9. 成功解决3dmax打开或导入模型文件的时候,出现文件打开失败

    成功解决3dmax打开或导入模型文件的时候,出现文件打开失败 目录 解决问题 解决思路 解决方法 (1).不是.max文件,

最新文章

  1. [SharePoint 2010] Configuration SMTP for SharePoint 2010
  2. MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)
  3. unsigned char对应java_Java的数据类型,怎么就没有uchar呢
  4. jsonp获取服务器数据的方式
  5. php常量定义表达式,从表达式创建PHP类常量的最佳解决方法?
  6. 【从前端到全栈】- koa快速入门指南
  7. 设置linux拨号服务端,CentOS Linux上搭建PPPoE服务器及拨号设置
  8. 使用HTML5 FormData轻松完成Ajax表单提交
  9. mongodb在windows下安装启动
  10. git rebase 工作流
  11. 【微型计算机原理与接口技术】80X86微处理器发展与内部结构
  12. Vs 中关于项目中的某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”
  13. markdown2 awesomium 无法预览
  14. Ubuntu18.04安装专业版pycharm【免费】
  15. Win10、win7、win8免费升级win11系统的方法
  16. 富贵竹叶子发黄怎么办?
  17. 收集的一些有意思的网站(持续更新)
  18. 2017年中国大数据发展趋势和展望解读(上)
  19. 阿里云化身“智能云管”,助力中国联通首次实现大规模平台自主运维
  20. 第3讲 旋转向量、欧拉角、四元数

热门文章

  1. Md5加密算法的原理及应用
  2. js身份证号正则判断
  3. rtsp 报文转发_stp技术回顾和rstp经典笔记
  4. 关于微信小程序的多选和全选实现
  5. 程序员自爆奇葩入职原因:进腾讯是为了不用续费年费会员,进抖音是想天天上班刷抖音
  6. 女子花2万元雇友人杀逝世女街坊
  7. 软件授权License的区别
  8. Ubuntu 22.04 桌面美化之Mac Big Sur风格
  9. 算法:动态申请数组(new)后将数组所有元素置零(初始化数组)的方法(炒鸡简单)(C++语言)
  10. 淘宝线上线下“出淘”欲打造零售业航母