版本控制系统是一种记录若干文件变化,以便将来查阅特定版本修订情况的系统。
版本控制系统大量的应用在软件源代码的管理中。在这种情形下,多名程序员合作完成同一个项目,每个人对该项目贡献修改的代码都记录在版本控制系统中。
根据版本控制系统记录的信息,可以很快的找到谁最后修改了什么东西,因此可以很方便的恢复到项目开发的不同时间点。
(1)本地版本控制系统
本地版本控制系统通过记录历次文件修改之间的差异,来记录项目的不同版本。
经典的本地版本控制系统如rcs
(2)集中化的版本控制系统
为了让多人协同工作,集中式的版本控制系统应运而生(CVCS),比较常见的如:CVS, Subversion, Perforce等。
这些系统都有一个单一的集中管理的服务器,用来保存文件的所有修订版本。而协同工作的用户,则通过客户端连接到该服务器上,取出文件的某个快照,修改并提交更新。
虽然集中化的版本控制系统具有便于管理的优点,此外每个人都可以了解别人在做些什么东西。
但它的一个缺陷就是单点故障,当服务器因为故障而宕机,那么谁都无法提交更新,更别提协同工作了。
当服务器因为物理问题而导致数据丢失时,各个用户本地存在的只是某个版本的快照,没有整个数据的镜像,因此会导致数据无法恢复。
(3)分布式版本控制系统
分布式版本控制系统(DCVS)的特定在于,用户每次迁出的不是某一个版本的快照,而是原始数据的整个镜像。
因此当服务器发生故障的时候,可以任何一个本地镜像进行恢复。
常见的DCVS如:Git,Mercurial,Bazaar 以及 Darcs 等