作为一名人民的好干部,如果希望被惦记,可以学我们的郑书记,将自己和蔼可亲的光辉形象搬上台历;作为一名有梦想有追求而又不知道如何出名的人,你可以参考对岸的 “超想被包养”社团。而作为一个内核爱好者,要想成为一名内核开发者,为内核贡献自己的代码,我们必须要能够与其他众多的内核开发者协同工作,这就意味着应该能够使用内核的版本控制工具 Git 管理内核代码。
1. 什么是 Git
Git 是 Linus 专门为内核而开发的一个开放源码的版本控制软件,如下图 所示, Git 的主页 http://git-scm.com/ 很好的回答了 Git 是什么的问题。
Git 是一款免费的、开源的、分布式的版本控制系统,旨在快速高效地处理无论规模大小的任何软件工程。每一个 Git clone (克隆)都是一个含有全部项目历史记录的文件仓库( repository ),具有完整的版本修订追踪能力,它不依赖于网络连接或中心服务器,创建分支( branching )和合并分支( merging )非常的快速和简单。
目前,已经有越来越多的著名项目采用 Git 来管理项目的开发,比如 Perl 、 Gnome 、 Wine 等等。(注意,在 Ubuntu/debian 上,安装的是 git-core ,而不是 git )
2. Git 的由来
Linus 于 2002 年 2 月开始使用 BitKeeper 作为内核的版本控制工具。但是 BitMover 公司在商业版的 BitKeeper 之外,提供的 BitKeeper 只是仅可免费使用但不允许加以修改开放的精简版,因此,包括 GNU 之父 Richard Stallman 之内的很多人,对 Linus 使用 BitKeeper 感到不满。
然而,当时市场上并没有其他具备 BitKeeper 类似功能的自由软件可用,于是有些人就尝试对其进行逆向工程,这惹恼了 BitMover ,该公司于是决定停止提供 BitKeeper 的免费版本。为解决无工具可用的窘境, Linus 便自行开发 Git ,希望在适当的工具出现前,暂时得充当解决方案。当时 Linus 曾称 Git 为愚蠢的内容管理器( the stupid content tracker )。当 Git 有了迅速成长之后, Linus 就建议能够以其作为长期的解决方案,并于之后的 2.6.12-rc3 内核第一次采用 Git 进行发布。
3. 一段录像
在 Git 历史上有段很著名的录像,是 Linus 在 Google 的一个演讲,我们可以在 youtube 上看到它。在这段录像中, Linus 说明了设计 Git 的原因,基本的设计哲学,以及与其他版本控制工具的比较。
从技术的观点上, Linus 非常尖锐的批判了 CVS 与 SVN 。虽然 Linus 从来没有使用过 CVS 去管理内核代码,但是他在商业公司曾有过一段不短时间的使用经历,而且对其强烈的厌恶。同时他批判 SVN 是毫无意义的,因为 SVN 尝试从各方面去改善 CVS 的一些缺点,却无法根本的解决一些基本的使用限制。具体来说就是, SVN 改善了创建分支的所耗费的成本,相对 CVS 利用了比较少的系统资源,但是却无法解决合并分支的需求。但是许多项目的开发过程中,都时常需要为不同的新功能创建分支、合并分支,如此依赖, SVN 就成为一个没有未来的项目。
Git 作为一个分布式的版本控制工具,你可以随意的创建新分支,进行修改、测试、提交,这些在本地的提交完全不会影响到其他人,可以等到工作完成后再提交给公共的仓库。这样就可以支持离线工作,本地提交可以稍后提交到服务器上。
Linus 提到,在内核开发社区中有一种信任关系( web of trust ),像内核这样庞大的项目,每个版本参与的开发者都非常多,但是 Linus 不可能认识这么多的人,自然地,他只能信任最为熟悉的极少数人,并相信那些人的智商与能力是足以信赖的,于是他只需要信赖这些人的成果,而同时这些人又在自己的信任圈力找到他可以信赖的人,于是利用这样的信赖机制扩展成了网状的内核开发社区。
实际上,社区中也会演化出几个角色,比如司令( dictator )、副官( lieutenants )、开发者,少数的副官只需要专注在他们熟悉的领域,整合开发者的成果,并提交给司令做最后的整合决策,这样一来,各种不同的领域都可以交给最为熟悉的开发者去管理,而项目开发本身不会被限制阻塞在某个角色身上,相对而言是一种比较高效的开发社区结构。
4. 一些资源
本书并不会也不需要对 Git 的具体使用过程进行介绍,下面仅推荐几个好的网站或资料以供学习参考。
http://www.ibm.com/developerworks/cn/linux/l-git/
这篇文章详细描述了如何使用 Git 来管理内核代码。
http://www.youtube.com/watch?v=4XpnKHJAok8
这就是上面提到的那段著名的录像,相信认真的消化之后会有不小的收获。
http://book.opensourceproject.org.cn/versioncontrol/git/gittutorcn.htm
Git 的中文教程。
http://zh-cn.whygitisbetterthanx.com/#github
这是 Kanru 翻译的《为什么 Git 比 X 更好》,简要的说明了 Git 与其他版本控制工具的比较,可以让你了解各种工具之间的差异细节。
很多人说正是 GitHub 让他们选择了 Git ,相比其他的项目托管网站,它更象一个社交网络,可以追踪别人的状态,不过追踪的不是朋友发出的信息,而是朋友写出的代码。人们可以在 GitHub 上找到与他们在做的事相关的其他开发人员或项目,然后轻松地 fork 和贡献,这样形成了一个以 Git 和各种项目为中心的活跃社区。