1.4 Git——Linus的第二个伟大作品

Linux之父Linus是坚定的CVS反对者,他也同样地反对SVN。这就是为什么在1991-2002这十余年间,Linus宁可以手工修补文件的方式维护代码,也迟迟不愿使用CVS的原因。我想在当时要想劝说Linus使用CVS只有一个办法:把CVS服务器请进Linus的卧室,并对外配以千兆带宽。

2002年至2005年,Linus顶着开源社区精英们口诛笔伐的压力,选择了一个商业版本控制系统BitKeeper作为Linux内核的代码管理工具[1]。BitKeeper不同于CVS和SVN等集中式版本控制工具,而是一款分布式版本控制工具。

分布式版本控制系统最大的反传统之处在于,可以不需要集中式的版本库,每个人都工作在通过克隆建立的本地版本库中。也就是说每个人都拥有一个完整的版本库,查看提交日志、提交、创建里程碑和分支、合并分支、回退等所有操作都直接在本地完成而不需要网络连接。每个人都是本地版本库的主人,不再有谁能提交谁不能提交的限制,加上多样的协同工作模型(版本库间推送、拉回,以及补丁文件传送等)让开源项目的参与度有爆发式增长。

2005年发生的一件事最终导致了Git的诞生。在2005年4月,Andrew Tridgell(即大名鼎鼎的Samba的作者)试图对BitKeeper进行反向工程,以开发一个能与BitKeeper交互的开源工具。这激怒了BitKeeper软件的所有者BitMover公司,要求收回对Linux社区免费使用BitKeeper的授权[2]。迫不得已,Linus选择了自己开发一个分布式版本控制工具以替代BitKeeper。以下是Git诞生过程中的大事记[3]

2005年4月3日,开始开发Git。

2005年4月6日,项目发布。

2005年4月7日,Git就可以作为自身的版本控制工具了。

2005年4月18日,发生第一个多分支合并。

2005年4月29日,Git的性能就已经达到了Linus的预期。

2005年6月16日,Linux内核2.6.12发布,那时Git已经在维护Linux核心的源代码了。

Linus以一个文件系统专家和内核设计者的视角对Git进行了设计,其独特的设计让Git拥有非凡的性能和最为优化的存储能力。完成原型设计后,在2005年7月26日,Linus功成身退,将Git的维护交给另外一个Git的主要贡献者Junio C Hamano[4],直到现在。

最初的Git除了一些核心命令以外,其他的都用脚本语言开发,而且每个功能都作为一条独立的命令,例如克隆操作用git-clone,提交操作用git-commit。这导致Git拥有庞大的命令集,使用习惯也和其他版本控制系统格格不入。随着Git的开发者和使用者的增加,Git也在逐渐演变,例如到1.5.4版本时,将一百多个独立的命令封装为一个git命令,使它看起来更像是一个独立的工具,也使Git更贴近于普通用户的使用习惯。

经过短短几年的发展,众多的开源项目都纷纷从SVN或其他版本控制系统迁移到Git。虽然版本控制系统的迁移过程是痛苦的,但是因为迁移到Git会带来开发效率的极大提升,以及巨大的效益,所以很快就会忘记迁移的痛苦过程,而且很快就会适应新的工作模式。在Git的官方网站上列出了几个使用Git的重量级项目,每一个都是人们耳熟能详的,除了Git和Linux内核外,还有Perl、Eclipse、Gnome、KDE、Qt、Ruby on Rails、Android、PostgreSQL、Debian、X.org,当然还有GitHub的上百万个项目。

Git虽然是在Linux下开发的,但现在已经可以跨平台运行在所有主流的操作系统上,包括Linux、Mac OS X和Windows等。可以说每一个使用计算机的用户都可以分享Git带来的便利和快乐。

[1]http://en.wikipedia.org/wiki/BitKeeper

[2]http://en.wikipedia.org/wiki/Andrew_Tridgell

[3]http://en.wikipedia.org/wiki/Git_%28software%29

[4]http://marc.info/?l=git&m=112243466603239