关于版本控制
版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。可对任何类型的文件进行版本控制。
本地版本控制
本地版本控制系统通常用复制整个项目目录的方式来保存不同的版本,或许还会加上备份时间以示区别。这样做的唯一好处就是简单,但特别容易犯错,有时会混淆所在的工作目录,一不小心会写错文件或覆盖意想之外的文件。
本地版本控制系统大多都是采用某种简单的数据库来记录文件的历次更新差异。
其中最流行的一种叫做RCS(Real-time Control System - Wikipedia ),它的工作原理是在在硬盘上保存补丁集(补丁是指文件修订前后的变换);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
集中化的版本控制系统
集中化的版本控制系统(Centralized Version Control System,简称CVCS)主要为解决在不同系统上的开发者协同工作问题,,诸如CVS、Subversion以及Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们通过客户端连到这台服务器,取出最新的文件或提交更新。
这种做法的好处是相教于老式的本地VCS来说,现在每个人都可以在一定程度上看到项目中的其他人正在做什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个CVCS要远比在各个客户端上维护本地数据库来得轻松容易。但是这么做显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这个小时内,谁也无法提交更新,也就无法协同工作。如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的真个变更历史,只剩下人们在各自机器上保留的单独快照。本地版本控制也有类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,简称DVCS),在这类系统中,向Git、Mercurial、Bazaar以及Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这样一来,任何一处协同工作的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同小组的人相互协作。可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。