版本控制系统前言
如果你是一枚程序猿,或者是网站等等的开发人员,如果你正在为怎样提高团队开发效率,更好的解决在开发中遇到的BUG,又或者为怎样管理备份代码而发愁,那么,你该去了解一下版本控制系统了。
什么是版本控制系统呐,举个例子吧,我在开发一个网站项目的时候,首先开发出了版本一,好的,将版本一部署到服务器上,部署好之后请客户验收,客户看过之后,提出了一些修改意见,然后要按照客户的意见修改网站功能,在修改首页的时候,为了防止丢失原来的首页,我将其另存为index.htm.backup,而后在index.htm的基础上修改,修改完后存为index.htm,后来发现缺少一个功能,我又开始修改首页,将index.htm存为index.htm.2,开始加入新的功能,完成后保存,在改完后测试发现出现了bug,又返回开始修改bug,将index.htm存为index.htm.3,又开始修改…,如此往复,最后去看index.htm,发现已经是一团糟,更不不记得哪一个版本引入了新功能,哪一个版本新引入了bug。
造成这种现象的原因是在修改代码的时候没有使用版本控制系统,造成代码重复保存、修改,出现混乱。上面举得只是个人在开发的时候遇到的问题,这仅仅只是其中的一方面,如果团队在项目开发,更要利用版本控制系统来协同开发、管理代码。
版本控制系统的历史
CVS——开启版本控制系统的大门
CVS ( Concurrent Versions System )诞生于1985年,是由荷兰阿姆斯特丹VU大学的Dick Grune 教授实现的。当时Dick Grune 教授和两个学生一起共同开发一个项目,但是三人的工作时间无法协调到一起,迫切需要一个记录和协同开发的软件。于是,Dick Grune 教授通过脚本语言对RCS(一个针对单独文件的版本管理软件)进行封装,设计出了历史上第一个被大规模使用的版本控制工具。
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成为开源社区和各大公司企业间的新宠。
但是,相比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下运行,为每一个代码开发者带来了便利。