随着信息技术的发展,软件开发已不是小手工做坊,软件的规模和复杂度已经再也不适合一我的单打独斗的开发了,安全
团队协做变得至关重要,若是没有VCS(版本控制系统Version Control System),团队开发就会变得乱七八糟。服务器
1.版本控制概论网络
版本控制是记录咱们对文件、目录或工程等修改的历史,方便查看更改历史,备份以便恢复之前的版本,多人协做。分布式
最先的版本控制是纯手工的版本控制:修改文件,保存文件副本。spa
因为许多时候偷懒省事,保存副本文件名比较随意,时间一长就不知道哪一个是哪一个了。设计
因为手工管理比较麻烦且混乱,后来就出现了本地版本控制,记录文件每次的更新,能够对每一个版本作一个快照,或是记录补丁文件。3d
可是本地版本控制系统偏向于我的使用,或者多个使用的人必须使用相同的设备,若是须要多人协做那就很差办了。版本控制
因而乎,集中版本控制(Centralized Version Control Systems,简称CVCS)应运而生。blog
在CVCS中,全部版本数据都保存在服务器上,一块儿工做的人从服务器上同步更新或上传本身的修改。开发
可是,全部版本数据都保存在服务器上,用户要获取最新版本就须要从中心服务器上下载,若是网络的带宽高还好,不然会很是麻烦。
同时查看历史版本也必须联网,若是不联网就看不到历史版本,没法切换版本验证问题,或不能在不一样分支工做。
并且,全部数据都保存在一台服务器上,数据面临丢失的风险。
针对CVSC的以上缺点,就出现了分布式的版本控制(Distributed Verson Control System,简称DVCS),经常使用的有Git、Mercurial等。
DVCS不是复制指定版本的快照,而是把全部的版本信息仓库所有同步到本地,这样就能够在本地查看全部的历史版本,
能够离线在本地提交,只须要在联网时推送到相应的服务器或其它用户那里。
因为每一个用户那里保存的都是全部的版本数据,因此只要一个用户的设备没有问题就能够恢复全部数据。
固然,这增长了本地存储空间的占用。
2.集中式VS分布式
因为在实际生产中基本上都是使用集中式或分布式的版本控制,因此下面会分析一下各自的优缺点。
(1)集中式版本控制系统
集中式的版本控制系统的版本库是集中存放在中央服务器,而干活的时候,用的都是本身的电脑,
因此先要从中央服务器取得最新的版本,而后开始干活,干完活后,再把本身的或推送个中央服务器。
中央服务器就比如一个图书馆,你要改一本书,必须先从图书馆借出来,而后回到家中改,改完以后再放回图书馆。
集中式版本控制最大的毛病就是必须联网才能工做,没有网你什么都作不了,并且受制于带宽。
(2)分布式版本控制
与集中式版本控制相比,分布式版本控制没有“中央服务器”,每一个成员的电脑都是一个完整的版本库,
这样你工做的时候就不须要联网,由于版本库就在你本身的电脑上。那么多人是如何协做的了?
若是你修改了一个文件A,你的同时也修改了一个文件A,那么你俩之间就能够相互推送,而后决定最终的版本。
还集中式版本系统相比,分布式版本系统的安全性要高的多,由于每一个人都有一个完整的库,因此某我的的电脑出了问题不打紧,
只要从别人那里复制一份就好了,而集中式的版本控制系统要是“中央服务器”出了问题,那就完全玩完。
在实际使用分布式版本控制系统的时候,大部分时候对于两我的来讲可能不在一个局域网以内,
这样两台电脑就不能直接访问,或者说双方并非同时在线,以及其余种种缘由,所以在分布式系统中须要有一台服务器充当“中央服务器”,
可是只是方便不一样库之间的版本推送,没有它也能工做。
固然,咱们接下来要详细介绍的Git并非说只有没必要联网这么简单。
CVS做为最先的开源并且免费的集中式版本控制系统,直到如今依然还有很多人在使用。
因为CVS自身设计的问题,会形成提交文件不完整,版本库莫名其妙损坏的状况。
一样是开源并且免费的SVN修正了CVS的一些稳定性问题,是目前使用最多的集中式版本控制系统。
Git是一种很是流行的分布式版本控制系统,也能够叫作源代码管理系统,相对于SVN来讲就是分布式。
SVN须要一个中心服务器保存源代码,全部的开发者都是用客户端进而这个服务器交互。
GIt的强大之处并不是在于分布式,而是其对源代码存储的机制(使用快照),
因为这样的机制的存在,你能够大量频繁的使用分支来工做,经过分支来隔离功能开发的过程。