版本控制系统

一、版本控制
    什么是“版本控制”? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。还记得当年修改毕业论文时的保存方法吗?有了版本控制,再也不需要那么麻烦了。
二、本地版本控制系统
    本地版本控制系统采用某种简单的数据库来记录文件的历次更新差异。此类系统就是复制整个项目目录来保存不同的版本,并记录每次更新的差异。
    其中最流行的一种叫做RCS,现今许多计算机系统上还可看到它的踪影。
三、集中化的版本控制系统
    如何让不同系统上的开发者协同工作呢?集中化的版本控制系统(Centralized Version Control Systems,简称CVCS)便应运而生,诸如CVS、Subversion及Perforce等。这类系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
    相比于老式的本地VCS来说,这种做法使得每个人都可以一定程度上看到项目中其他人在做什么,而管理员也能够轻松掌控每个开发者的权限。但这么做的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
四、分布式版本控制系统
    分布式版本控制系统(Distributed Version Control System,简称 DVCS)极好地解决了上述问题。 在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 如此,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
    此外,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
 
原文地址:https://www.cnblogs.com/yanqingyang/p/9514550.html