一.版本库(version control system)的简单介绍

版本控制系统(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。使用版本控制系统通常还意味着,就算乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

常见的版本库有:svn,git等.

二.版本控制系统发展至今经历过的版本库类型

版本控制系统通常分为本地版本控制系统、集中式版本控制系统、分布式版本控制系统.

三.简单介绍版本库的发展过程:

  1. 本地版本库控制系统—->顾名思义就是自己在本地对文件的备份.

常用的方法:复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。

这么做唯一的好处就是简单,但是特别容易犯错。有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

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


其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影.它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容.

  1. 集中式版本库系统: SVN

为了让不同系统上的开发者能够协同工作,集中化的版本控制系统应运而生(CVCS)。这类系统(如SVN,CVS等)都有一个单一的集中管理的服务器,保存所有文件的修订版本。而协同工作的人们都通过客户端连接到这台服务器,获取最新的文件或者提交更新.多年以来,这已成为版本控制系统的标准做法。

好处:
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

1、 管理方便,逻辑明确,符合一般人思维习惯。 

2、 易于管理,集中式服务器更能保证安全性。

3、 代码一致性非常高。

4、 适合开发人数不多的项目开发

缺陷:
这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

  1. 分布式版本控制系统———->GIT

为了解决集中式版本库可能会出现的单点故障的缺陷,分布式版本库系统(Distributed Version Control System,简称 DVCS)应运而生.

在这类系统中,像Git 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份.

优点:

1、适合分布式开发,强调个体。 

2、公共服务器压力和数据量都不会太大。

3、速度快、灵活。

4、任意两个开发者之间可以很容易的解决冲突。

5、离线工作。

缺点:

1、学习周期相对而言比较长。 

2、不符合常规思维。

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

四.分布式版本库系统(这里主要说的是git)和集中式版本控制系统(SVN)的主要差别在于:

  1. 最核心的区别Git是分布式的,而Svn不是分布的。话说回来Git跟Svn一样有自己的集中式版本库和Server端,但Git更倾向于分布式开发.

  2. Git把内容按元数据方式存储,而SVN是按文件.因为.git目录是处于机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。.git目录的体积大小跟.svn比较,就会发现它们差距很大.

  3. Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征

  4. Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏

  5. Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以

  6. 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员都一起瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git可以有无限个版本库

  7. 分支(Branch)在SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支.而Git,每个工作成员可以任意在自己的本地版本库开啟无限个分支.

  8. 提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经无法阻止事情的发生了。如果网路中断,你根本没办法提交!而Git的提交完全属於本地版本库的活动。而你只需“推”(git push)到主要版本库即可。Git的“推”其实是在执行“同步”(Sync)

参考链接:https://www.jianshu.com/p/2d7aa1ddeede