版本控制系统前言linux
若是你是一枚程序猿,或者是网站等等的开发人员,若是你正在为怎样提升团队开发效率,更好的解决在开发中遇到的BUG,又或者为怎样管理备份代码而发愁,那么,你该去了解一下版本控制系统了。git
什么是版本控制系统呐,举个例子吧,我在开发一个网站项目的时候,首先开发出了版本一,好的,将版本一部署到服务器上,部署好以后请客户验收,客户看过以后,提出了一些修改意见,而后要按照客户的意见修改网站功能,在修改首页的时候,为了防止丢失原来的首页,我将其另存为index.htm.backup,然后在index.htm的基础上修改,修改完后存为index.htm,后来发现缺乏一个功能,我又开始修改首页,将index.htm存为index.htm.2,开始加入新的功能,完成后保存,在改完后测试发现出现了bug,又返回开始修改bug,将index.htm存为index.htm.3,又开始修改…,如此往复,最后去看index.htm,发现已是一团糟,更不不记得哪个版本引入了新功能,哪个版本新引入了bug。github
形成这种现象的缘由是在修改代码的时候没有使用版本控制系统,形成代码重复保存、修改,出现混乱。上面举得只是我的在开发的时候遇到的问题,这仅仅只是其中的一方面,若是团队在项目开发,更要利用版本控制系统来协同开发、管理代码。windows
版本控制系统的历史 CVS——开启版本控制系统的大门
CVS ( Concurrent Versions System )诞生于1985年,是由荷兰阿姆斯特丹VU大学的Dick Grune 教授实现的。当时Dick Grune 教授和两个学生一块儿共同开发一个项目,可是三人的工做时间没法协调到一块儿,迫切须要一个记录和协同开发的软件。因而,Dick Grune 教授经过脚本语言对RCS(一个针对单独文件的版本管理软件)进行封装,设计出了历史上第一个被大规模使用的版本控制工具。ruby
CVS 采用服务器/客户端架构设计,版本库位于服务器端,实际上就是一个CVS容器。每个RCS文件以,v做为文件名后缀,用于保存对应文件的每一次更改历史。RCS文件中只保留一个版本的彻底拷贝,其余历次更改则差别存储其中,使得存储很是有效率。服务器
CVS最大的优势就是简单,但他的缺点使得CVS不能适应现代的版本控制,其缺点主要有网络
服务器松散存储的文件使得其在创建里程碑及分支时效率不高,而且当服务器端存储的文件越多时,其效率越低。 分支和里程碑不可见,由于他们被分散的记录在服务器端的各个RCS文件中。 合并困难。 因为文件在服务器端是单独经过差别存储的,不能优化存储内容相同但文件名不一样的文件。 不能对文件盒目录的重命名进行版本控制。
CVS 的成功激发了版本控制工具的大爆发,各式各样的版本控制系统如雨后春笋般爆发出来,这其中最典型的的就是SVN。架构
SVN——集中式版本控制系统
Subversion,因为其命令行工具为svn,所以一般被称为SVN,SVN由CollabNet公司于2000年资助并开始开发,目的是建立按一个更好用的版本控制系以取代CVS,到2001年,SVN已经能够用于本身的版本控制了。分布式
SVN的每一次提交,都会在服务器端db/revs和db/revprops目录下各建立一个以顺序编号命名的文件。其中db/revs目录下的文件记录了于上一次提交之间的差别(字母A表示新增,M表示修改,D表示删除)。在db/revprops目录下的同名文件则保存着提交日志、做者、提交时间等信息。这样作使得SVN拥有全局版本号,每提交一次,SVN版本号都会自动加1,使得使用SVN有了极大的便利;同时,在提交时文件名不受限制,由于服务器端不须要创建和客户端文件类似的文件名,因而,文件命名不受服务器操做系统字符集和大小写的限制。svn
SVN在目录的轻量级拷贝、版本库受权以及冗余的拷贝方面的亮点,使得SVN成为开源社区和各大公司企业间的新宠。
可是,相比CVS,SVN本质上没有区别,都属于集中式版本控制系统。即一个项目对应一个版本库,全部成员只能经过网络向服务器上的版本库提交,这样除会出现单点故障外,在查看提交日志及提交数据的延迟,也带来了许多不便。
GIT——伟大的分布式版本控制系统
Linux之父Linus是CVS和SVN的坚定反对者,在他管理维护linux代码时,一直以手工修补文件的方式管理代码,在2002年至2005年期间,Linus选择了一款商业版本控制系统bitkeeper做为linux内核的代码管理工具,bitkeeper不一样于CVS和SVN ,是一款分布式的版本管理工具。
2005年的一件事致使了Git的诞生,samba的做者Andrew Trigell试图对BitKeeper进行反向工程,以开发一个能与BitKeeper交互的开源工具,这激怒了BitKeeper的全部公司,要求收回linux社区免费的BitKeeper使用权。无可奈何,Linus最终决定本身开发一个分布式版本控制工具,因而,Git诞生了。
Linus以一个文件系统专家和内核设计者的视角对Git进行设计,其独特的设计让Git拥有非凡的性能和最为优化的存储能力。通过短短几年的发展,Git获得普遍的承认,众多的开源项目纷纷迁移到Git上来,如Git和linux的内核外,还有Perl、GNOME、KDE、Qt、ruby on Rails、Android、Debin,还有github上的上百万个项目。
现在,git能够在linux、Mac OS、windows下运行,为每个代码开发者带来了便利。