版本控制软件发展至今已有40多年的历史。
最早的版本控制软件是1972年由Marc J. Rochkind开发的SCCS (Source Code Control System),通过将不同版本下的文件单独保存的形式完成,将同一版本的所有文件打包保存。SCCS使用了长达10年的时间,直到1982年RCS的问世。
1982年,Walter F.Tichy 发布了RCS (Revision Control System),提供了较SCCS更多的功能,并作为GNU项目的一部分。
1986年创建的CVS也是一款使用时间长,范围广的版本控制软件。但其并不记录文件的更名,移动,并且CVS的commit操作并不支持原子(atomic)操作,这也带来了一定的安全隐患。其定义的branching模型一直沿用到后面的版本控制软件中。2008年5月,CVS的停止开发。
2000伊始,Subversion (SVN)作为CVS的替代品问世,其几乎全面兼容CVS。2009年11月,Subversion被Apapche社区接受,目前由该社区进行开发维护。SVN提供了真正的atomic commits,增强了鲁棒性。同时,其提供了对文件的追踪,可以记录下文件在历史上的的改名,移动操作。使用SVN,可以轻松实现http下的版本控制,非常方便的进行branching,以及原生支持二进制文件的版本管理。
但SVN也存在着一些不足:SVN提出了一种tagging的模型(一个tag实际就是一个branch)进行版本控制,对文件系统以快照的形式保存,导致了虽然其本身的branching过程比较简单,但在客户端操作较为耗时。并且,SVN并不记录历史信息,无法进行diff操作。
接下来,便到了GIt出场的时候。Git的出现或许也是巧合,这源于BitMover停止提供免费的版本控***务。Linux Kernel的开发起初都是在BitMover公司的一套专利系统,BitKeeper,进行的,同时BitKeeper还支持着几个其他的开源软件的开发。由于合作一直进行,社区中的程序员起初并没有想过要自己开发一个版本控制软件。但2005年BitKeeper终止了与开源社区的合作协议,并支付了赔偿金(关于这部分还有很多有趣的争论,感兴趣的可以去看看BitKeeper and Linux: The end of the road?)。于是Linus等人根据在BitKeeper上的使用经验,开始着手开发自己的版本控制系统,
Git的最重要的功能在于其分布式的设计,这也是第一个分布式的版本控制软件,提供了客户端轻量级的维护。GIt的开发于2005年4月开始, 主要由Junio Hamano负责,于12月发布了1.0版本。这里是Git的开发仓库。目前,Github和BitBucket都提供了免费的Git服务。
与以往不同,Git强调了非线性的开发,具体体现在其方便的branch和merge功能。同时,使用Git进行版本控制速度快,尤其表现在大型软件的开发方面。
Git的缺点表现在其学习曲线,要想完全掌握Git的特性并不容易。另一方面,Git并不会记录空目录,这也是一些人抱怨的原因。
几乎与此同一时间的,Mercurial也是一个很成功的版本控制软件,拥有着与Git相同的目的。目前BitBucket提供了免费的Mercurial系统。
Git前世今生-版本控制软件的发展,布布扣,bubuko.com