什么是版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
主要实现的功能有:
-
实现跨区域多人协同开发
-
追踪和记载一个或者多个文件的历史记录
-
组织和保护你的源代码和文档
-
统计工作量
-
并行开发、提高开发效率
-
跟踪记录整个软件的开发过程
-
减轻开发人员的负担,节省时间,同时降低人为错误
-
简单说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如多人开发软件代码冲突合并的问题、软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
常见的版本控制工具
主流的版本控制工具有:
-
Git
-
SVN((Subversion))
-
CVS(Concurrent Versions System)
-
VSS(Micorosoft Visual SourceSafe)
-
TFS(Team Foundation Server)
-
Visual Studio Online
版本控制产品非常的多((Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault等),现在影响力最大且使用最广泛的是Git与SVN,本章主要介绍Git的安装及使用,后续再出SVN的使用教程。
版本控制发展及的分类
-
本地版本控制(SCSS、RCS)
立足于对单个文件变化的跟踪,检出的文件一次只能由一个用户在本地进行编辑,用户通过自己的帐户登录到同一共享Unix主机方式实现。
-
SCCS第一代版本管理系统
SCCS(Source Code Control System)是最早创建的VCS工具。它由贝尔实验室的Marc Rochkind于1972年用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命令的列表。 sccs create <filename.ext>:将新文件检入SCCS并为其创建新的历史记录文件(默认在./SCCS/目录中)。 sccs get <filename.ext>:从相应的历史文件中检出文件,并以只读模式将其放置在工作目录中。 sccs edit <filename.ext>:从相应的历史文件中检出文件进行编辑。锁定历史记录文件,以便其他用户无法修改它。 sccs delta <filename.ext>:检入对指定文件的修改。将提示填写commit,将更改存储在历史记录文件中,然后删除锁。 sccs prt <filename.ext>:显示跟踪文件的修
-