CVS(英语:Concurrent Versions System,或Concurrent Versioning System)代表协作版本系统或者并发版本系统,是一种版本控制系统,方便软件的开发和用户协同工作。
简介很多开源或者自由软件项目都使用CVS作为其程序员之间的中心点,以便能够综合各程序员的改进和更改。这些项目包括:Gnome、KDE、GIMP、Wine等。CVS的使用获GNU通用公共许可证授权。
这是一个将一组文件放在层次目录树中以保持同步的系统。人们可以从CVS服务器上更新他们的本地层次树副本,并将修改的结果或新文件发回;或者删除旧文件。
CVS基于客户端/服务器结构的行为使得其可容纳多用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选(现已被Git、SVN等逐渐替代)。1
功能CVS采用客户端-服务器架构:服务器存储的当前版本(一个或多个)项目和它的历史,和客户端连接到服务器,以便在这个副本中,并“退房”的项目的完整副本,工作之后“检查”他们的变化。通常,客户端和服务器通过LAN或Internet连接,但如果CVS的任务是仅与本地开发人员一起跟踪项目的版本历史记录,则客户端和服务器都可以在同一台计算机上运行。服务器软件通常在Unix上运行(尽管至少CVSNT服务器也支持各种版本的Microsoft Windows),而CVS客户端可以在任何主要版本上运行操作系统平台。
几个开发人员可以同时处理同一个项目,每个开发人员在他们自己的项目“工作副本”中编辑文件,并将他们的修改发送(或签入)到服务器。为避免冲突,服务器仅接受对最新版本文件所做的更改。因此,开发人员应通过定期纳入其他人的变更来保持其工作副本的最新状态。此任务主要由CVS客户端自动处理,仅在签入修改与尚未检查的文件本地版本之间发生编辑冲突时才需要手动干预。
如果签入操作成功,则所涉及的所有文件的版本号自动递增,并且CVS服务器将用户提供的描述行,日期和作者的名称写入其日志文件。每次提交后,CVS还可以运行外部的,用户指定的日志处理脚本。这些脚本由CVS的loginfo文件中的条目安装,该文件可以触发电子邮件通知或将日志数据转换为基于Web的格式。
客户还可以比较版本,请求更改的完整历史记录,或者查看项目的历史快照,如给定日期或修订版号。
CVS服务器可以允许“匿名读取访问”,其中客户端可以签出并比较版本与空白或简单发布的密码(例如,“anoncvs”);只有在这些情况下,更改的登记需要个人帐户和密码。
客户端还可以使用“更新”命令使其本地副本与服务器上的最新版本保持同步。这消除了重复下载整个项目的需要。
CVS还可以维护项目的不同“分支”。例如,软件项目的发布版本可以形成一个分支,用于修复错误,而当前开发中具有重大更改和新功能的版本可以形成单独的分支。
CVS使用增量压缩来有效存储同一文件的不同版本。这适用于大型文本文件,从一个版本到下一个版本的更改很少。这通常是源代码文件的情况。另一方面,当CVS被告知将文件存储为二进制文件时,它会将每个单独的版本保留在服务器上。将文件存储为二进制文件非常重要,以避免二进制文件损坏。2
限制CVS不支持文件的复制和重命名。
没有原子性提交(Atomic commit)
CVS只支持文字档。1
与GNU的关系CVS和GNU项目之间的关系长期以来有些含糊不清:GNU网站分发了程序,在一个页面上标记了“GNU包”,在另一个页面上标记了“其他GPL许可项目”。2008年,当CVS的开发从旧网站(cvshome.org)转移到GNU Savannah托管平台时,它被放置在“非GNU”部分。此外,在GNU的FTP下载服务器上,CVS分布在“非gnu”目录中。2
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所