推荐博文: Linux内核“问题门”——学习问题、经验集锦
推荐下载:《Linux内核修炼之道》精华版之方法论
作为一名人民的好*,如果希望被惦记,可以学我们的郑书记,将自己和蔼可亲的光辉形象搬上台历;作为一名有梦想有追求而又不知道如何出名的人,你可以参考对岸的“超想被包养”社团。而作为一个内核爱好者,要想成为一名内核开发者,为内核贡献自己的代码,我们必须要能够与其他众多的内核开发者协同工作,这就意味着应该能够使用内核的版本控制工具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和各种项目为中心的活跃社区。