在开发人员开发软件、系统的时候,经常会有开发人员叫运维人员更新新的版本,那么你们知道更新新的版本,是整个目录更新,还是某一部分更新?那么旧的版本是要怎么处理呢?整个目录删除了还是保存在另一个目录呢?一般来说,我们都不会把旧版本删除了,会在另外的目录保存下来,以防新版本有问题时候能够回退。

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少,有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

本地版本控制系统

大体上本地版本控制系统的原理,可以使用下面的一张原理图来体现,在本地服务器中,对一个文件使用不同的版本进行标识。
运维自动化之何为版本控制?_第1张图片

在此种模式当中,最流行的应该是一种叫rcs的架构,现今许多计算机系统上都还看得到它的踪影。甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。

除了记录版本变更外,版本控制的另一个重要功能是并行开发。什么是是并行开发?如果不知道的话,请继续跟我往下学习。

我们都知道软件开发一般来说是多人同时共同作业的结果,这就是并行开发。但是并行开发是有问题的,因为我们不会时时刻刻就知道对方更新了哪些新的代码,又修改了哪一个接口。而版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高共同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决,于是就有了下面的这种控制系统。

集中式的版本控制系统

什么是集中式的版本控制系统呢?它的存在,就是为了解决不同的开发者共同维护一份数据的功能,其中最著名的,莫过于SVN这个工具了。简单来说,就是有很多的开发人员,他们分别都需要对同一个项目里面导入文件,并且每个人都可以对导入的文件做相关的修改,SVN就是这种机制,他提供了一种类似FTP的方式,可以让你不用远程下载服务器上的文件,而直接对文件做远程的修改,然后同步,这样每个开发人员,只要阅读文件前,进行文件的更新,就可以读取到最新的文件,因此这也是集中式版本控制系统的功能。

但是此类版本控制系统往往都是存放在一台单一的文件系统上的,因此在企业的使用中,都需要考虑高可用,以及相关的可靠性问题。
运维自动化之何为版本控制?_第2张图片

下面我们介绍另外一种版本控制系统,也是目前最流行的关于比较高效的版本控制系统的架构,目前在很多的企业已经使用,笔者所在的睿江云,也使用了此种方式的版本控制系统。

分布式版本控制系统

分布式版本控制系统( Distributed Version Control System,简称 DVCS ),在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
运维自动化之何为版本控制?_第3张图片
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

现在你应该知道什么是版本控制了吧?了解了版本控制是做什么的了。那么下次我们来深入了解一下版本控制的内容有哪些。
下篇预告:《运维自动化之版本控制有哪些内容?》
运维自动化之何为版本控制?_第4张图片
睿江云计算官网链接:https://www.eflycloud.com/home?from=RJ_0024