版本控制与git
自从第一台计算机出现,便出现了计算机语言.出现计算机语言之后,怎么来管理这些代码以及如何团队协同合作开发一直成为业界头疼的事.这篇文章便是介绍版本控制的发展史,以及如何实现版本管理的模型.
下图为版本控制的发展历史:
上图基本上就是整个版本发展的历史进程.
1 patch & diff
刚开始时,我们用的是简单的diff与patch命令管理代码.如果是一个人开发的话,这样的行为还可以忍受,但是随着代码架构的复杂性的加大,团队合作越来越紧密.patch & diff已经越来越满足不了开发人员的需求.这个时候急需一种管理软件来管理这些代码.CVS便应运而生.
2 CVS:1985
1985年,CVS 的创始人难以忍受团队合作效率低下,在回家的路上思考如何设计一种软件来管理代码.
最初的CVS包括SVN都是集中式版本控制.如图:
上图即是集中式管理控制软件的模型,代码由服务器控制,各成员从服务器checkout以及commit代码.
相对于之前由diff&patch代码控制的年代,CVS已经做的很不错了.但是还不够好.比如不支原子提供,没有全局号控制等等.当然这些都是细节的问题.为了解决这些细节问题,另一个集中式管理软件SVN出现了.
3 SVN:2001
SVN出现于2001年,在这之前除了那些商业软件,基本上大家都是在用CVS,可见当年CVS还是极其受用户欢迎的.
SVN也是集中式管理软件,它的出现模型与CVS相同,只不过在细节上处理的比CVS更合理.因此在2001年到2006年,大家都转向了SVN.各种SVN的开发插件也跟着出现.
由于SVN不仅仅是对于代码管理,还会被用于文档的管理,因此图形化界面的SVN也跟着出现,虽然CVS也有图形化界面,但是由于其没有全局版本号,因此流传不广.
在ubunut下的SVN的图形化界面:
如上图所示的,版本下面的58便是全局版本号,还有作者及修改日期都列举在其中.当文件被修改时,会显示红色表示与服务器上的代码有差异.
虽然SVN已经做的很不错了,但是由于代码管理必须得有服务器存在,对于用户来说是一种极大的制约,分布式管理软件解决了这个难题.
4.git
当集中式版本控制发展到顶峰时,各种分布式商业版本已经出现.只不过开源的分布式版本控制软件一直没有人做.
分布式版本控制的模型如下:
每个用户都是服务器,各个用户之间可以进行代码推拉的操作.用户的commit行为只是提交到本地服务器里,这样用户不再被离线提交所困扰.
2005年之前的linux代码都是由一款商业软件管理.linux社区的一个核心成员要开发一种插件与这款商业软件进行交互.这种行为彻底激怒了软件的版权所有公司,立即决定收回了这款软件的授权.这个时候linux之父linus才下定决心要开发一种分布式的开源软件git.
说到这里,我们应该感谢那位核心成员,如果不是他的这种行为,就不会有git的今天.
Git的两大优点:1.开源.2.分布式.
它有支持离线提交,而且也对原子操作的支持,还有快速的分支创建切换等等优点,可以说是集万千宠爱于一身.
5.结束语
版本控制发展到今天,分布式管理是必然的趋势.也许将来会有更合理更人性化的分布管理软件,但是现在git由于其开源及分布式成为一种发展趋势.