上次我们八卦了大神Linus用2周时间写了世界上最受欢迎的分布式版本控制系统Git. 现在我们来学习一下不同的版本控制系统。
为什么我们需要版本控制系统
这几天一个小学生写的情书刷屏了。 他的电脑桌面应该是这样的:
一封情书改了又改, 那些矫情到感动自己的话, 又舍不得删掉。 所以只好一次次复制整个文件, 在文件名上用时间或者别的文字来提醒自己,这大概是改的第几稿, 有什么说不出口的话保存在这里。。。
我们在编写软件系统时, 常常会遇到这样的问题: 这个BUG是什么时候引入到系统里来的? 新开发的功能目前暂时不想发布,如何同时保存新功能的代码?
几个人同时修改一个文件, 如何合并? 一次提交的修改, 涉及到哪些文件?。等等。。
版本控制系统(VCS)就是来帮助解决这一系列问题的。有了它你就:
可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,
可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。
使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微
VCS就像一个大话西游里的月光宝盒, 更棒的是,你不仅可以回到系统的过去, 还可以随心所欲改变系统的命运。
本地版本控制系统
最简单的是VCS控制系统就在本机。
集中化的版本控制系统
但是现实中的项目往往都是多人协助的结果, 所以需要把版本控制系统放到服务器上, 让多人访问。
集中化的版本控制系统常用的有诸如 CVS、Subversion 以及 Perforce等。 使用很广泛,已成为版本控制系统的标准做法。
不过集中化的版本控制系统从系统架构上有个严重问题, 就是中央服务器的单点故障。 通俗的是就是:鸡蛋不能都放在一个篮子里, 不要在一棵树上吊死等等。设想如果中央服务器宕机, 所有人都没法协作工作了, 而且所有的数据也可能丢失。
于是就有了:
分布式版本控制系统
Git就是分布式版本控制系统。客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
同时, 因为多个远端代码仓库的存在 (集中化的版本控制系统只有一个),你就可以在同一个项目中,分别和不同工作小组的人相互协作。 这也是Git 大获成功的一个关键原因。
领取专属 10元无门槛券
私享最新 技术干货