相信各位开发者对Git不会陌生,就算不熟悉Git相信你对GitHub也有所了解。而Git这款在版本管理工具中叱咤风云的软件是如何出现的呢?在Git之前版本管理又是如何发展的呢?在本文里我会对版本控制工具的发展和Git的起源的进行介绍。
我们在开发一款软件时,尤其是多人协作开发,代码的管理是十分重要的。比如个人开发时需要对代码的版本进行管理,多人协作开发时需要一个工具来进行代码的合并、冲突处理、版本管理等等。这样一款工具我们往往称之为“版本控制系统”。
在最初的日子里,我们同步、管理代码可能是通过软盘拷贝、文件服务器(类似现在的云盘)来进行的。但是这种方法丝毫没有处理代码冲突的能力,合并代码只能通过人工手动来操作,这大大消耗了我们的人力和时间。
diff 和 patch
第一次改善这种状况是 diff 和 patch 命令的出现。假如我们现在有两个文本文件 a.txt 和 b.txt。其中 diff 命令可以比较 a.txt 和 b.txt 的文本差异,另外它还可以比较两个文件夹之间的差异。假如我们把差异保存到了diff.txt 中,patch 命令则可以根据 diff.txt 和 a.txt、b.txt 的其中任一文件得出另一文件。这两个工具的出现让我们合并代码的能力得以增强。
CVS 和 SVN
第一个可以管理整个工程的版本工具CVS(ConCurrent Versions System)诞生于 1985年,它是由荷兰一所大学 Dick Grune 教授打造。当时教授在和几个学生协同开发一个项目,但苦于项目代码的合并,于是教授就基于单个文件版本工具 RCS 开发了 CVS。
CVS 采用 C/S 架构设计,服务端来进行版本库的管理工作,服务端通过只保留一份文件拷贝和记录差异使其存储效率大大提高。CVS 也奠定了版本控制工具的模型,CVS中的commit log、tag、branch等属性都在后续出现的版本控制工具中得以延续保留。
可以说CVS是集中式版本管理工具的开山鼻祖。当然CVS也存在很多问题,而正是因此,类CVS版本控制工具大量出现,在一定程度上解决了CVS存在的问题,SVN就是其一。
SVN(Subversion)于2000年由CollabNet资助开发,目标就是取代CVS。SVN优化了很多特性,如实现了原子提交、全局版本号、文件轻拷贝等,这些优化也使得它在版本控制工具中成为最佳选择之一。但SVN本质上是一种集中式版本管理工具,这种版本控制太依赖于服务器,如果服务器出现问题,版本控制将不可用;如果网络较差,提交代码将变得十分漫长。再加上SVN本身设计的一些问题,使用其进行版本管理也并存在很多不如意之处。
Git
Git是由Linux之父Linus开发的,在2005年4月3号开始开发,到 4.7 仅四天时间Git就可以投入使用了。到同年6月份,Linux已经在使用Git管理代码了。
Linux版本管理最早是通过手工合并代码的方式进行的,不使用CVS的原因就是Linus坚决反对这种集中式的版本管理工具。而迫于其他开发者的压力,Linus最后决定使用BitKeeper一种分布式的版本管理工具。与集中式不同,使用分布式的版本管理工具每个人都可以在本地进行版本的管理,如日志提交、代码提交、创建tag和分支、合并分支等等操作。
而在2005年4月,Andrew Tridgell 为了开发一个可以与BitKeeper交互的工具,试图反编译BitKeeper。这让开发该软件的公司BitMover得知并取消了Linux社区免费试用BitKeeper的权利。这也成为了Linus开发Git的契机,促进了Git这一伟大作品的诞生。
Git为版本管理打开一扇新的大门,后续我会对Git的入门使用进行介绍,如有兴趣请继续关注。
版权声明
本文首发自简书,搜索作者 QinGeneral
同步发于CSDN博客,搜索作者 QinGeneral
同步发于微信公众号:AndroidRain
无需授权即可转载,甚至无需保留以上版权声明;
转载时请务必注明作者。
领取专属 10元无门槛券
私享最新 技术干货