关于版本控制
Posted chen-sx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于版本控制相关的知识,希望对你有一定的参考价值。
关于版本控制
什么是版本控制
- 定义
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
- 举个例子
快毕业了要写毕业论文,可能你的毕业论文要该很多个版本,第一稿、第二稿等等,如果你没有“版本控制“这个思想,可能你每一个稿都在一个word文档下更改,如果你哪一个突然需要之前几稿的内容或者需要变回之前的内容,那么你一定会抓狂。而如果你有”版本控制“这个思想,那么你可能每一稿都保存在一个单独的word文档上并取好名字,那么你需要变动成以前或者需要之前的内容,那么就很简单了,只需要查看之前的word文档即可
在网上还有一个很形象的比喻,那就是把版本控制工具比作穿梭机,可以把代码变回到之前的样子
为什么要使用版本控制
有了版本控制你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
这些优点在多人开发的时候尤其重要
有什么版本控制工具
- 本地版本控制系统
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。 它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
- 集中化的版本控制系统
上面的问题解决了,接下来面临着如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
可以从上图看出,集中化的版本控制版本系统比本地版本控制系统,多了一个集中管理的服务器
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
缺点:
如果一旦服务器宕机,谁都无法提交更新,也就无法协同工作。服务器数据损坏,也将丢失所有数据
- 分布式版本控制系统
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
以上是关于关于版本控制的主要内容,如果未能解决你的问题,请参考以下文章