几乎所有的版本控制工具都是出于同样的目的:开发以及维护开发出来的代码,方便读取代码的历史,记录所有的修改。这里,介绍的是当前在开源社区内非常流行的版本控制工具Git。它是由Linus Torvalds发明的,最初是为了方便管理linux内核的开发工作。
Git的诞生:
通常来说,当工具跟不上项目需求时,开发人员就会开发一个新的工具来替代它。大部分工具在发明之前,都会已经存在一些类似的工具,新工具则是在原有工具的思想上进行了更加合理的修改。那么在Git之前,有哪些版本控制工具呢?它们都有哪些特点呢?
1、源代码控制系统SCCS:
这是有证可查的可以运行在UNIX上最早的VCS,它提供了一个数据存储中心作为版本库,提供了一个简单的锁模型。该锁模型需要锁定-检出-解锁,是一个串行修改的版本控制系统。
2、修订控制系统RCS:
引入了双向差异的概念,来提高文件不同版本的存储效率。
3、并行版本系统CVS:
1986年由Dick Grune设计并实现,新概念包括分布式开发、提出一个关于锁的新范式。CVS给予每个开发人员对于自己私有版本写的权限,不同开发人员的改动可以自动合并。当两个开发人员试图修改同一行时,会提示冲突,并要求手动修改。
4、SVN:
提出了以原子方式提交改动部分。
5、BitKeeper和Mercurial:
淘汰了中心版本库的概念,数据的存储变成分布式的,每个开发人员都拥有自己刻共享的版本库副本。
6、Mercurial和Monotone:
首创了用散列指纹来唯一标识文件的内容。
Git在设计之初,或多或少的借鉴了上述几个版本控制工具的想法。
Git的特性:
1、有助于分布式开发:
它允许并行开发,不需要与一个中心版本库时刻同步,允许许多开发人员在不同的地方,甚至是离线的情况下,无障碍的开发。个人认为这个特点正是SVN所欠缺的。
2、能够胜任上千开发人员的规模:
3、性能优异。
4、保持完整性和可靠性:
Git使用了安全散列函数SHA1来命名和识别数据库中的对象。
5、强化责任:
Git对每一个有文件改动的提交强制使用改动日志,定位谁改动了文件,以及改动的原因。
6、不可变性:
Git版本库中存储的数据对象均为不可变的。
7、原子事务:
让一系列不同诞生相关的操作要么全部执行,要么全部失败,确保版本数据库不会陷入部分改变或者破损的状态。
8、支持并鼓励基于分支的开发。
9、完整的版本库:
可以让每个开发人员不需要查询中心服务器就可以得到历史修订信息。