CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,用一张图直观的表示集中式版本控制系统。
从上图我们可以看出很直观的看出集中式管理系统的特点,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
本地是没有版本库的修改记录的,所以集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
那分布式版本管理系统呢,同样用一张图表示分布式版本管理系统
首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
既然是多人协作,我们肯定是需要指定一个人的电脑作为总仓库,所以人从他的电脑上提交更新,拉取别人的提交,这样才能保证他的仓库保留了所有人的改动。 这个人其实就充当了集中式中的服务器仓库的角色。
所以我们通常说的分布式管理系统的服务器就是其实就是找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
集中式和分布式的区别:
从集中式和分布式版本管理系统的流程图的比较之后我们可以直观的看出,两者的不同。 但是分布式比集中式的优势,不仅仅在于近乎全部的本地化操作,
我们可以进一步想想,一个大的项目,有可以分为不同的小组之间进行协助,每个小组有不同的研发方向。这就需要系统支持小组内的成员进行协作开发,同步工程。再进一步, 小组和小组之间进行协作开发。同步工程。这在集中式的管理系统中是不可能实现的。
另外分布式也比集中式更加安全,每次提取项目,就是把整个项目完成的镜像下来,这么一来,任何一处的协同工作用的服务器发生故障,事后都可以用任何一个镜像的仓库恢复。