version control
版本控制是一种记录文件或文件集随时间变化的系统,以便您以后可以调用特定版本。对于本书中的示例,您将使用软件源代码作为受版本控制的文件,但实际上您可以使用计算机上的几乎任何类型的文件来执行此操作。版本控制,也被称为修订控制或源控制,是对文档的更改,管理计算机程序,大型网站,以及其他信息集合。更改通常由数字或字母代码标识,称为“修订号”,“修订级别”或简称“修订版”。例如,初始文件集是“修订版1”。进行第一次更改时,结果集为“版本2”,依此类推。每个修订都与时间戳和进行更改的人相关联。可以比较,恢复和某些类型的文件的修订,组织和控制修订的逻辑方法的需要几乎与编写存在一样长,但在计算时代开始时,修订控制变得更加重要和复杂。书籍版本和规范修订版的编号可以追溯到仅印刷版时代。今天,最有能力(以及复杂)的版本控制系统是在软件开发中使用的系统,其中一组人可以同时对相同的文件进行更改。
本地版本控制系统
很多人选择的版本控制方法是将文件复制到另一个目录(如果它们很聪明,可能是带时间戳的目录)。这种方法很常见,因为它非常简单,但也非常容易出错。很容易忘记你所在的目录并意外写入错误的文件或复制你不想要的文件。
为了解决这个问题,程序员很久以前就开发了一个本地VCS,它有一个简单的数据库,可以对文件的所有更改进行修订控制。
集中版本控制系统
人们遇到的下一个主要问题是他们需要与其他系统上的开发人员协作。为了解决这个问题,开发了集中版本控制系统(CVCS)。这些系统(例如CVS,Subversion和Perforce)具有包含所有版本化文件的单个服务器,以及从该中心位置检出文件的许多客户端。多年来,这一直是版本控制的标准。
此设置提供了许多优势,尤其是在本地VCS上。例如,每个人都知道项目中的其他人正在做什么。管理员可以对谁可以做什么进行细粒度的控制,管理CVCS比处理每个客户端上的本地数据库要容易得多。
但是,这种设置也有一些严重的缺点。最明显的是集中式服务器所代表的单点故障。如果该服务器停机一小时,那么在那个小时内,任何人都无法进行协作或将版本化更改保存到他们正在处理的任何内容中。如果*数据库所在的硬盘损坏,并且没有保留适当的备份,那么您绝对会丢失所有内容 - 项目的整个历史记录,除了人们碰巧在本地计算机上发生的任何单个快照。本地VCS系统也遇到同样的问题 - 只要您将项目的整个历史记录放在一个地方,就有可能失去一切。
分布式版本控制系统
这就是分布式版本控制系统(DVCS)介入的地方。在DVCS(例如Git,Mercurial,Bazaar或Darcs)中,客户端不只是查看文件的最新快照; 相反,它们完全镜像了存储库,包括其完整的历史记录。因此,如果任何服务器死亡,并且这些系统通过该服务器进行协作,则可以将任何客户端存储库复制回服务器以还原它。每个克隆都是所有数据的完整备份。
此外,许多这些系统可以很好地处理他们可以使用的多个远程存储库,因此您可以在同一个项目中以不同的方式与不同的人群进行协作。这允许您设置在集中式系统中不可能的多种类型的工作流,例如分层模型。