Progit 第一章 新手上路 第一节 关于版本控制

关于版本控制

什么是版本控制,为什么我们需要关心它?版本控制是这样一个系统,它按照时间一个记录一个和多个文件的变化,从而你以后可以回顾任何一个特定的版本。对这本书当中的例子来说,你将使用软件的源代码作为被版本控制的文件,尽管在现实当中你可以通过计算机对任意类型的文件进行版本控制。

如果你是一名图形或者Web设计者,并且想保证每一个图像或者布局的版本都被保留下来(这些是你真的想要的),版本管理系统(VCS)是一个非常明智的选择。它允许你将文件回退到之前的状态,将整个工程回退到之前的状态,按照时间比较差异,查看是谁进行了最后一次可能导致问题的修改,谁在什么时候引入了一个问题,等等。使用VCS通常也意味着如果你把事情弄糟了或者有些文件丢失了,你可以很容易的恢复。另外,你只需要很小的代价就能得到这些。

本地版本控制系统

许多人的对版本控制方法的选择是将文件复制到另一个目录(也许是一个有时间戳的目录,如果他们聪明的话)。这种方法非常普通,因为它足够简单,但是也难以置信的容易出错。很容易你就会忘记你在哪个目录,并且意外地写入你或者复制不想要的文件。

为了处理这种问题,程序员很久以前就开发了本地VCS,它有一个简单的数据库,并且在版本控制下记录了所有的变化(见图1-1)。

图1-1. 本地版本控制图示

一个非常流行的VCS工具是一个叫做RCS的系统,它还在被很多电脑使用。连流行的Mac OS X操作系统当你安装了开发工具之后,也会包含RCS命令。这个工具通过一种特殊的格式来记录两两版本之间补丁的集合(文件之间的差异),从而进行版本控制;它可以通过应用所有补丁来重建任意时间点的任意文件。

集中式版本管理系统

下一个人们遇见主要问题是他们需要和其他系统上的人合作。为了解决这个问题,集中式版本管理系统(CVSC)被开发出来。这些系统,例如CVS,Subversion和Perforce,有一个独立的服务器包含了所有被版本管理的文件,一些客户端从那个中心服务器将文件Check out出来。在之后的许多年,这都成为了版本控制的标准(见图1-2)。

图1-2 集中式版本管理系统图示

这种设置提供了许多优势,特别是和本地VCS相比。例如,所有人可以了解别人在这个项目上都做了什么。管理员可以细致地控制谁可以做什么;而且管理一个CVCS和管理每个客户端的数据库。

但是,这种设置也有许多严重的缺点。最显著的缺点就是集中式服务器带来的单点失效。如果服务器停机一个小时,在这段时间内没有人可以对他们的工作进行合作,或者保存版本变化。如果中央数据库的硬盘出现冲突,而且没有做好备份,那么你就丢失了所有的东西——项目的所有历史记录,除了一些可能在人们硬盘上的快照。本地VCS系统也有同样的问题——当你将所有项目的历史放在一个地方,你就承担了丢失所有东西的危险。

分布式版本管理系统

这就是分布式版本管理系统(DVCS)为什么诞生。在DVCS(例如git,Mercurial,Dazaar或者Darcs)中,客户不仅仅取出了最新的快照:他们也是版本库的完整镜像。因此如果哪个服务器宕机了,并且这些系统通过它进行合作,任何一个客户的版本库可以复制到服务器并且恢复。每个Checkout都是对所有数据的完整备份(见图1-3)。

图1-3 分布式版本管理图示

更进一步,许多这种系统都可以很好的处理和多个远程版本库协作的工作,因此你可以和不同的组的人在不同的方式上同时工作于同一个项目。这让你可以建立许多不同类型的工作流,这在集中式系统中是不可能的,例如层次模型。

This entry was posted in Progit and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).

This site uses Akismet to reduce spam. Learn how your comment data is processed.