深入 git 必看:git 是如何被创造的?讲述 git 的诞生
git 是世界上最先进的分布式版本控制系统,没有之一。
前言
本文简要阐述了 git 的诞生历程,以及其作者 Linus Torvalds(林纳斯·托瓦兹,同时也是 Linux 之父)对 git 的思考。对开发者而言,了解 git 产生的背景和设计理念,有助于更好地理解和使用 git;对管理者而言,则能更好地对企业项目开展有效的管理。
本文授权并同步首发于欢聚时代旗下技术公众号:YYGeeker。更多干货,欢迎订阅。
未经许可,严禁转载。
本文阅读用时:8 分钟。
欢聚时代(YY)及虎牙(HUYA)面试内推请移步文末。
年轻时的 Linus Torvalds
芬兰,被誉为千湖之国。这是一个由众多湖泊和岛屿组成的国家,准确的说,全国共有 188,000 个湖泊和 179,000 个岛屿。
1969 年,Linus Torvalds 生于芬兰一个知识分子家庭。父亲 Nils Torvalds 毕业于赫尔辛基大学,是一名活跃的电台记者。母亲 Anna Torvalds 同样毕业于赫尔辛基大学,也是一名记者。有趣的是,他的祖父奥 Ole Torvalds 也是一名记者。除此之外,Torvalds 的外祖父 Leo Tornqvist 是芬兰第一批统计学教授。优秀的家庭背景为 Torvalds 奠定了接受良好教育的基础。Torvalds 在 11 岁时,应其外祖父要求用 BASIC 语言编写一些统计学方面的小程序。大众普遍认为,这是他编程经历之始。
在这样的背景下,似乎注定了这位少年拥有不平凡的成长经历。
CC BY-SA 4.0 图片版权许可1988年,Torvalds 进入赫尔辛基大学计算机科学系就读。在兴趣的趋势下,Torvalds 创造并发布了自制的操作系统,并将其命名为 Linux。1996 年硕士毕业并移居美国,后拥有美国国籍。2003 年,为专心维护 Linux 从全职公司辞职。
芬兰人性格内敛,这与 Torvalds 的行事方式不谋而合。但他对开源的信念是近乎执着的,为此不少树敌。
赫尔辛基大学,成立于1640年,是芬兰最大且历史最悠久的最高学府。Torvalds 一家三口都毕业于此。
与 BitKeeper 分道扬镳:git 诞生的导火索
在 git 诞生之前,Torvalds 选择使用 BitKeeper 进行 Linux 版本管理。BitKeeper 是一个闭源的商业软件,这个决定长期受到社区的质疑和争议。
公有领域 图片版权许可2005 年,一位 Linux 开发成员 Andrew(Samba 协议之父)写了一个可以连接 BitKeeper 仓库的外挂,因此 BitMover 公司(BitKeeper 持有者)认为他反编译了 BitKeeper。BitMover 决定中止 Linux 免费使用 BitKeeper 的授权。最终 Linux 团队与 BitMover 磋商无果,Torvalds 决定开发自己的版本管理系统。
十天后,git 诞生了。
你没有看错。git 从开始到诞生,Torvalds 这位天才只用了 10 天的时间。
极具前瞻性的三个诉求
在确定开发 git 前,Torvalds 对市面上多个版本管理方案进行过评估,但现有的方案都不令人满意,最终决定开发自己的版本管理系统。
Torvalds 认为,健壮的版本管理系统应当有以下三个特性:
- 可靠性(reliable)
- 高效(high-performance)
- 分布式(distributed)
这三个特性,被视为 git 的核心灵魂所在,深远的影响了 git 及其他 SCM 的后续发展。
可靠性(reliable)
数据的存入取出必须是安全的、一致的。所有行为都要校验,仓库任何部分不允许篡改。在今天看来,这并不是什么高明之举,但在当时,绝大多数的 SCM 都做不到这一点。那时候,人们依赖保护中央服务器来保证数据不被篡改,而不是依靠版本管理自身的设计来保证。
Torvalds 认为,应当通过算法来保证,仓库任何一个字节被篡改,都能够被发现。
高效(high-performance)
这是 git 极具优势的特性。Torvalds 认为,版本管理的所有操作都必须在毫秒级内完成:这是对 svn 最大的批评。查日志、拉分支、合并、提交这些高频率操作,必须能够在本地能够完成,而不是等待服务器响应。这一特性直接决定了 git 能够被广泛传播。
作为对比,svn 每一步操作都在等待数据包成为了人们口中的诟病。
分布式(distributed)
以往人们在备份资料上花了很大精力:传统的中央服务器,资料受损是灾难性事故。现在,所有人电脑中的 git 仓库都是一致的,每个人的仓库都是完整的副本。完整的副本意味着可以在本地做所有事;允许相互同步促使它被设计成为自带数据校验。
最终,Torvalds 围绕着这三个诉求,用 10 天的时间创造出 git。
事实证明,这些想法是极具前瞻性的。git 在解决原有诉求的前提下,还解决了长久以来的一些痛点。
刺破痛点
从工程的角度看,许多 SCM 方案都有各自的杀手锏,例如 BitKeeper 在超大型项目的优越性能,以及 SVN 精准的权限控制。但在实际生产方面,则有所欠缺。
代码政治
大多数 SCM 都存在权限争议问题,特别是在超大型项目上。开发者最常见的发问是,你凭啥不给我权限?在有些企业,代码管理被沦为政治工具,权限则被视为权利的象征。分布式的 git 则不存在此问题,如果你拥有该仓库,你就拥有了所有的权限。
提交粒度
如果「提交代码」容易对他人造成影响,那么就没人愿意频繁提交。在开发阶段,由于代码始终无法完美(例如,包含测试代码、代风格错误、还有待改动),以至于总是无法提交代码(强行提交将造成他人无法运行)。导致的结果是,大量改动堆积,最后一次性提交。这样的后果是,单个 commit 提交粒度极大,还会导致合并、code review、乃至回滚的困难。而 git 的 commit 操作不需要推送到远程,因此随意提交也不会不影响他人。
创建新分支
在许多 SCM,创建新分支是「重量级操作」,并且所有人可见。在许多项目看来,创建新分支是重大行为。因为创建新分支影响重大,因此开发人员不会随意创建新分支。这直接导致了同一个分支上需要承载大量的业务。而由于 git 的操作是本地化的,你可以随意创建分支(毫秒级操作)并行多个子迭代,迭代完毕且合并分支后,再删除分支标签。最后推送到远程服务器,他人并不知晓你创建过什么分支。
开源,共筑,影响力
革新总是艰难的。当 Linux 开发团队决定使用 git 作为版本管理的时候,社区反对声音并不小,理由是 git 太难用了。实际上,确实是这样的,Torvalds 也承认了这点。
技术服众还不够。Torvalds 的领导力是惊人的,他发动社区力量让大家投入到 git 的开发当中。随着开发的深入,git 命令变得更简单,更易用。另一方面,开源有助于集思广益,并且避免腐败。
后来的事,大家都知道了。git 逐渐被大众接受,为 git 提供托管服务的 github 于 2008 年 2 月上线,从此 git 点亮万家灯火。
github-free 图片版权许可另外,2016 年 5 月,BitKeeper 宣布以 Apache 2.0 许可证开源。但人们说,太晚了。
今天的 Torvalds
Torvalds 与妻子 Tove 育有三名孩子。Tove 曾获得六次芬兰空手道冠军头衔。
2000 年,在时代 100 人:本世纪最重要的人物投票中,他位居第 17 名。
2004 年,他被评为世界最有影响力的人之一。
2010 年,宣誓成为美国公民。
2018 年 10 月,在休假反省一个多月之后,Torvalds 继续接管内核开发。Torvalds 在维护项目上一向言行激烈,不少人因此而受到伤害。他表示「对自己过去的行为表示反悔,对因为他的言行而受到伤害的人表示道歉」。
CC BY 3.0 图片版权许可内推
现在,欢聚时代(YY Inc.)及虎牙(HUYA Inc.)所有岗位(包括但不限于 Android、iOS、Java、前端、大数据、机器学习、音视频算法、其他非技术岗均可)均可进行内部推荐。
发送简历到 zhujiajun#yy.com(#替换成@),并附上简历,即可内推。
回家等通知?时间宝贵,不做无谓等待。加入知识星球并内推,享受内推进度查询待遇。
加入知识星球