做开发,你们肯定会接触到这样一个概念,那就是版本控制。借用当下流行的一句话,如果你是一个开发人员,不理解版本控制,那么你肯定是一个假的开发人员。这里,我就来给大家详细解释一个版本控制。
这是一个主要内容:
- 版本控制简介
- 版本控制分类
- 版本控制工具
版本控制简介
正所谓知己知彼,方能百战不殆。面对一个位置的概念,你只有先了解它是什么,才能深入的理解它,使用它。那什么是版本控制呢?
什么是版本控制:
官方:版本控制是一种记录若干文件内容变化,以便于将来查阅特定版本修订情况的系统。
划一下重点: 若干文件变化, 查阅特定版本修订情况, 系统。
我这个蠢货的理解:像QQ这个软件,从v1.0更新到v2.0。对于我们开发人员来说,也就是我们改动代码,重新打包发布了。这里的改动了代码。也就是文件内容变化。版本控制也就将这个改动也记录下来。有可能你不记得这次升级是为了什么。而通过版本控制也就可以将这个改动的详细情况给你展示出来,例如:那些文件中哪出代码有所改动,是谁修改的,修改时的日志(一般记录着这次修改的目的)。
现在你知道版本控制是什么了。但是有什么用呢?
版本控制有啥用呢?
上面我们知道了它的一些功能。那知道它有什么好处呢。要知道我可是无利不起早的人啊。上面说到我们可以看到哪些文件中的哪些代码做了什么改动。那我们不就可以看着这些改动就其改回去么。这个功能太强大了。就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。但是如果改动过多,自己改回去也麻烦,于是版本控制工具出现了。你只需输入一些指令,这些工作它都能完成。
版本控制工具可以:
- 将某个文件回溯到之前的状态
- 将整个项目回溯到过去某个时刻的状态
- 比较文件的变化细节
- 查出是谁改动了这些代码
- 是谁在何时报告了这个功能缺陷
版本控制分类:
版本控制分为三大类:
- 本地版本控制
- 集中化版本控制
- 分布式版本控制
本地版本控制
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异
其中最流行的一种叫做 rcs,现今许多计算机系统上都还看得到它的踪影。甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。
集中化版本控制
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )应运而生。这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法.这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
分布式版本控制
于是分布式版本控制系统( Distributed Version Control System,简称 DVCS )面世了。在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。