北京治疗白癜风专家医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/etbdf/北京治疗白癜风专家医院 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/etbdf/当今IT界,VCS版本控制系统的的使用已经成了一种日常不可或缺部分。不光是程序员、IT界甚至在其他领域也是逐渐了有了共识。通过Github写书也不再是天方夜谭或者技术段子,而是实实在在天天发生的事情。本文,我们来一起回顾下历史上主要版本控制系统(VCS)的发展过程,涉及了内容有:SCSS、RCS、CVS、SVN,Git和Mercurial。
概述
回顾VCS的发展历程,总体上可以划分为三个阶段。
第一代VCS,包括SCSS和RCS。立足于对单个文件变化的跟踪,检出的文件一次只能由一个用户在本地进行编辑,用户通过自己的帐户登录到同一共享Unix主机方式实现。
第二代VCS,包括CVS和SVN。通过引入网络,从而形成了包含正式意义上的项目版本的集中式版本存储库。相比第一代VSC,有了实质性的发展,可以供多个用户同时检出并使用代码,但是他们都需要重新提交到同一中央存储库。存在的问题是严重依赖于中央存储库,对网络和实时性同步要求很大。
第三代VSC,包括Git和Mercurial。V到现在发展成为了分布式VCS。在分布式VCS中,创建存储库的所有副本都是相同的,无需一个集中的中央存储库。无需通过网络实时同步内容,只需本地创建提交,分支和合并打开了路径,在合适时候再推送到远端库。
VCS重要软件发展历史时间表:
SCCS第一代版本管理系统
SCCS(SourceCodeControlSystem)是最早创建的VCS工具。它由贝尔实验室的MarcRochkind于年用C开发。SCCS旨在解决源文件修订跟踪的问题。此外,它还解决程序bug错误定位的问题。SCCS是现代VCS的鼻祖,至此后VCS发展30年到现在茁壮发展。
功能
和大多数现代的VCS一样,SCCS支持一组命令,供开发人员做文件版本控制。主要实现的功能有:
检入文件以使用SCCS跟踪其历史记录;
检出特定的文件修订以供审核或编译;
检出特定的文件修订以进行编辑;
检入新文件修订以及说明更改的注释;
还原检出文件中所做的更改;
基本分支和变更合并;
提供文件修订历史记录。
技术实现
当添加文件到SCCS进行跟踪时,会创建一种称为s文件或历史文件特殊类型的文件。该文件使用以s开头的原始文件名来命名,存储在名为SCCS的子目录中。比如,一个名为test.txt的源文件将在./SCCS/目录中创建一个名为s.test.txt的历史文件。创建后,历史记录文件将包含原始文件的初始内容以及一些元数据以帮助进行版本跟踪。文件校验和存储在历史记录文件中,以验证内容是否遭到篡改。历史记录文件的内容未经过压缩或编码。由于原始文件的内容存储在历史记录文件中,因此可以将检出到到工作目录进行查看,编译或编辑。可以将对文件所做的进一步更改(例如,行添加,修改和删除)检入到历史文件中,并增加修订号。
SCCS检入仅存储增量或文件更改,而不是每次存储整个文件内容。这样可以减小历史记录文件的大小。每次检入时,增量都存储在历史记录文件内部的称为增量表的结构中。如前所述,实际文件内容或多或少是逐字复制的,带有特殊的控制序列,用于标记已添加和已删除内容的各个部分的开头和结尾。由于SCCS历史记录文件不使用压缩,因此它们通常比要跟踪的实际文件大。
SCCS使用一种称为交错增量的增量方法,支持恒定时间检出,而不管检出的修订版有多老。即较旧的修订版检出所花费的时间不会比新的修订版更长。
需要注意的重要一件事是,所有文件都在SCCS中被单独跟踪和检入。没有办法将更改作为一个原子单位的一部分检入多个文件(和Git提交一样)。每个跟踪的文件都有一个对应的历史文件,用于存储其修订历史。
当检出文件以在SCCS中进行编辑时,为了防止更改被其他用户覆盖,文件上将放置一个锁,但是这会限制多用户的编辑从而开发效率。
SCCS支持可以在特定文件内存储更改序列的分支。分支可以与原始版本合并回去,也可以与同一父级的其他分支版本合并。
基本命令
以下是最常见的SCCS命令的列表。
sccscreatefilename.ext:将新文件检入SCCS并为其创建新的历史记录文件(默认在./SCCS/目录中)。
sccsgetfilename.ext:从相应的历史文件中检出文件,并以只读模式将其放置在工作目录中。
sccseditfilename.ext:从相应的历史文件中检出文件进行编辑。锁定历史记录文件,以便其他用户无法修改它。
sccsdeltafilename.ext:检入对指定文件的修改。将提示填写