十年前的这一周,linux 内核社区面临一个根本性的挑战:他们不再能够使用他们的修复控制系统:BitKeeper,同时其他的软件配置管理遇到了对分布式系统的新需求。Linus Torvalds,Linux的创始人,将这个挑战接手并消失了数周,创造了 Git 工具。今天 Git 被用于成千上万个工程,并且在程序员社区中掀起了一个新的社会化编码的浪潮。
为了庆祝这一里程碑,我们请 Linus 去分享 Git 的幕后故事,并且告诉我们这个工程队软件开发的影响。你会发现他在这个故事背后的的评论。我们跟随者Q&A追寻Git的轨迹,同时我们为其他的工程也描绘了轮廓。去查找KVM,Qt,Drupal,Puppet和wine背后的故事吧
为什么开发Git?
Torvalds: 我其实根本不想做源码管理,我认为源码管理是计算机领域最无趣的事(可能数据库更无趣 ;^)。我对SCM(源码管理工具)感到愤怒。但是BitKeeper的出现让我重新认识了源码管理。BK (BitKeeper)大多数都是正确的,但有本地副本的存储库与分布式合并是一个大问题。分布式源码管理的一个主要问题是源码管理的分离——谁才可以提交改变。BK展示了如何通过每个人都有源码库来避开这个问题。但是BK也有自己的问题:几种技术导制了这种问题(恼火的重命名),但最大的问题是它不开源,这让很多人不愿意使用它。因此,当我们以几个核心的维护使用BK而告终——它们是免费使用的开源项目——但它们无处不在。BK帮助了内核开发者,但是它还是有痛点。
当Tridge (Andrew Tridgell)对(相当简单的) BK 协议进行逆向工程--这是有悖于BK的使用规则的--的时候,事情到了不得不解决的地步。 我花了几个星期(几个月?我觉得是那样)在Tridge 和 Larry McVoy之间做调解,但是到最后,明显不起任何作用。于是,从那个时刻起,我决定不再继续使用BK,也不愿重回使用BK之前的糟透了的日子。同时,令人遗憾的是,一些其它的SCM,尝试着做分布式的事情,但是远程访问也没有处理好。我有性能的需求,不仅仅是满足远程可用,同时我还担心代码完整性和整个工作流,于是我决定自己写一个。
你是如何着手做这件事的?你是整个周末都在写代码,还是只在固定的几个小时呢?
Torvalds: 嗨,实际上,你可以从git的源代码仓库中,查看它是如何成型的,除了大概是最开始的一天。我大约花了一天时间来让git“自我管控”(self-hosting),这样,我就可以通过git来提交代码(commit)到git。所以大概第一天是隐藏的,但是所有其它的东西都在那里了。编码工作大多数在白天,但是也有少数在午夜,也有一些在凌晨2点。最有趣的部分是,它成型非常快;git树中的第一个commit并没有很多代码,但是它已经做了最基本的事情--可以提交(commit)自己。其中的技巧实际上不在于代码,而在于想出它如何组织数据的办法。
所以,我想说,git在大约10天左右的时间之后的样子(在这个点,我使用git做了*kernel*的第一次提交),它并不像某些疯狂的垃圾编码(而是有实际的使用价值)。早期的代码量实际上非常小,它的目标是正确实现基本点。 在整个项目开始之前,我一直在仔细考虑。我意识到其他人遇到的问题,也想到了要避免去做的事情。
它的存在周期达到了你的预期吗? 你认为它目前应该如何工作呢? 是否有一些限制呢?
Torvalds: 我对git非常满意。对于kernel的开发,它做的非常非常好,满足了我所有的预期。让我觉得有趣的是,它是如何接管了许多其它项目的。结果是令人吃惊的。在更换源代码管理系统的时候,有很大的惯性;看看CVS,甚至是RCS,它们占据了多长时间,但是,某个时刻起,git就完全接管了。
你觉得它为何如此广泛的被采用呢?
Torvalds: 我认为,其他许多人像我一样,都被同样的问题弄得灰心丧气,这些问题让我厌恶SCM。许多项目由于试着解决一两个边边角角的小问题而让人们抓狂,并不是像git这样真正的着手解决重要的问题。即便人们并不知晓“分布式”的部分有多么重要(许多人曾反对它),只要他们弄明白,git允许简单可靠的备份,同时允许人们生成他们自己私有的仓库,而不用担心一些中心仓库的拥有写访问权限的策略,他们是绝不会再回到以前的版本管理的。
Git会永远存在下去吗?或者说,您是否预见到在下一个10年中将会有其他的版本控制系统出现?你会是这个系统的作者之一吗?
Torvalds:不,我不会是这些作者中的一员。我们在10年内或许可以看到一些新的东西,但我保证这些东西也会是“类Git”的。这并不是说Git能正确地处理所有的事情,但它以一种前所未有的方式把最为基本的问题都解决了,在这之前没有一款软件配置管理工具(SCM)可以与之媲美。
我可以毫不谦虚地说 ;)
为什么Git能在Linux上工作得如此好?
Torvalds:好吧,很明显的它就是为了我们的工作流程而设计,因此他本身就是Linux的一部分。我已经多次提到完全的“分布式”部分,但它值得一再提及。它被设计得在面对如Linux的大型项目时有足够的效率,并且它被设计得去完成在它之前人们认为很“难”的任务——因为那些事情我每天都在做。
只举一个例子:代码合并的概念在多数源码管理工具中通常被认为是非常痛苦和困难的事。你会计划你的代码合并,因为那是重大的决定。那样的情况对我而言不能接受,自从我一天在合并的窗口前做数十次的代码合并之后,最头疼的的问题不是代码合并工作本身,最重要的应该是检查其结果。Git中,代码合并只会花费数秒,编写代码合并注释文字却会花费我很长的时间。
因此,Git基本上按照我的需求设计和编码,也这样实现。
有人说Git只是为聪明人设计的,甚至连Andrew Morton都说:“Git经过特意设计,以便让你感到自己不够聪明。”您对此有何回应?
Torvalds:我想在以前确实如此,但现在不同了。因为某些原因,人们觉得git难用,但我认为现在只剩一个原因,那就是:你可以用很多种方法完成一件事。
通过git你可以完成很多事请,git要求人们遵守许多规则,这些规则并非出于技术上的限制,而是为了让人们可以更好的合作。git是一个强大的工具,开始使用时你会感觉很困难,这通常是因为你可以用不同方法完成一件事,而且这些方法都能工作!一般说来,学习git最好的方法可能是,你先用它做最基本的事情,直到你熟悉这些基本操作,再去了解git的其它用法。
git的复杂有一些历史原因,其中之一是:它过去就很复杂!git的早期用户是那些为Kernel编程的人,他们不得不学习一系列非常难用的脚本。把绝大多数的精力花费在让git能用,而不是更易用。所以早期git给大家的印象(确实就)是,你必须很清楚自己在做什么。当然,在最初的半年或一年里,事实确实如此。
人们感觉git复杂的另一个原因:git不同以往的SCM。许多人使用CVS十年甚至二十年,但git不是CVS,它们一点也不像。git和CVS的设计理念不同,命令也不同。git从来没有想过模仿CVS,甚至相反。如果你曾经长时间使用CVS风格的SCM系统,就会感觉git很复杂,并且觉得那些和CVS不同的设计没有存在的必要。奇怪的修订编号会让你分心,你心想:为什么git的修订编号不能像CVS的1.3.1那样累加,而要选择一个奇怪的40字节的十六进制数呢?
但git并不是要故意标新立异。git确实和CVS存在差异,因为人们有不同的知识背景,所以这些差异使人们感觉其中一个比另一个复杂。CVS背景的东西正在渐渐远去,可能现在很多用过git的人从来没有用过CVS,他们就会不习惯CVS的使用方式。
你认为没有git,Linux Kernel能达到目前的开发速度吗?
Torvalds:呃,没有git,我认为可以。但那意味着需要有人写出与git相似的工具:一个像git一样高效的分布式的SCM。没错,我们确实需要像git这样的东西。
您目前对GitHub有何看法?
Torvalds:毫无疑问,Github是一个非常棒的代码托管服务,但我对它仍有一些看法:做为一个开发平台(提交代码,请求更新,跟踪issue等),GitHub有太多限制。它远不如Kernel的开发平台那样出色。
部分原因是由于Kernel的开发方式——git正是为Kernel开发而生,但另一部分原因是GitHub的界面鼓励不好的行为。比如,GitHub上的“完成提交”有一些不好的提交信息。GitHub曾经修复了一些问题,也许现在已经做得很好了,但它永远不能像Linux Kernel那样,和git完美结合。
请说一说在 Git 或 GitHub 上您最感兴趣的用法?
Torvalds:很高兴看到采用git可以很轻松的创建一个项目。以前的代码托管很难用,有了git和GitHub,创建一些小项目变得非常简单。项目具体是做什么并不重要,重要的是你可以做到了。
您最近还有其它项目吗?其它可以统治未来若干年软件开发的伟大项目?
Torvalds:目前没有,如果有的话我会告诉你。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
Git 10 周年之际,创始人 Linus Torvalds 访谈
时间: 2024-10-02 18:31:51
Git 10 周年之际,创始人 Linus Torvalds 访谈的相关文章
Linus Torvalds没有Linux未来十年计划
在年度LinuxCon峰会上,Linux创始人Linus Torvalds回答了有关安全和Linux未来十年演化的问题.Torvalds认为,安全就是bug,内核的大多数安全问题都是因为愚蠢的bug.对于Linux十年后将会走到何处,Torvalds说他从不想象如此遥远的未来,他是一名非常乏味缺乏想象力的人,他最多能看到6个月后,比如当前发布的版本和接下来发布的版本.他认为提前计划未来十年是神志不清. 笔者认为,在IT技术日新月异的今天,订立一个10年计划确实是不切实际的,因为技术更新太快,根本
Linux之父Linus Torvalds:讨厌C++
"Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由.在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 确切含义才能提高开发效率,而C++引入的各种抽象则使代码变得晦涩难读. 另外Linus还认为C++的内存管理方式很弱智(that idiotic "new" keyword in C++).邮件最后的总结是:很显然C并不适合所有项目,不过C++?还是算了吧.垃圾回收和并发等等,这些才是真
汽车之家10周年办演唱会,厂商们怎么看?
不知不觉汽车之家也已经10周年了,在互联网行业能有十年发展历史的公司为数不多,经过一轮又一轮的行业变革能坚持下来实属不易,但坚持下来的基本上都有不错的业绩并且大部分都已上市. 汽车之家的十年,从初期的追赶者变成了现今的领先者,如今,汽车市场就又开始变化,电商和O2O市场的迅速发展推动着汽车之家的转型.10周年往往是阶段性的象征,而汽车之家在10周年之际举办一场互联网思维式的免费万人演唱会活动或许并不是单单回馈用户那么简单,而是在尝试一些什么? 汽车之家举办10周年演唱会是为感谢用户,还是在向同行
Linus Torvalds 如何修正影响《猎魔人2》的内核 bug
Bug: CD Projekt去年为其角色扮演游戏<猎魔人2:国王刺客>加入了Linux支持,但Linux版并不是原生版本,而是使用一个特殊的包装器让Windows版本能在Linux机器上运行,方法类似Wine.游戏在Linux系统上的性能表现不佳,而以为买到了Linux原生版本的Linux玩家则感到了欺骗.但不是所有的问题都是游戏本身导致的.玩家在Steam论坛和GitHub<猎魔人2>非官方问题跟踪器上报告的游戏崩溃bug被发现是一个内核退化bug导致的,Linux作者Linu
当当10周年书香节,高端安全运维套装仅 168元
如今,很多人宁可一天花上几个小时刷微博微信/微博,却不愿抽出几十分钟静静读会儿书,古语有云:"万般皆下品,唯有读书高.明天就是"世界读书日",做为一名原创作者,真诚地希望我们的生活能够充满墨香的书声.在当当10周年书香节来临之际,为大家推荐三本高端Linux安全运维图书,三件套仅需168元. 以下图书均被中国科学院图书馆.国家图书馆.211.985高校图书馆收藏! Linux企业应用案例精解(第2版)读者答疑QQ群:73120574 选购地址 http://product.
写在弥勒宝贝两周年之际
写在弥勒宝贝两周年之际 粒子从宇宙诞生之初就存在世上,是它造就了我们,我常想那些原子,用140亿年穿越时间和空间来创造我们,好让我们能相遇-- 感谢你今生选择我做了你的父亲. 做了你的父亲,我才能完整地拥有你前半生的所有年华,让你拥有小公主般的童年,把你捧在手心里,看着你无忧无虑地长大. 也只有做你的父亲,我才能在你成长的每一个不快乐的时刻,第一时间来到你身边,帮你擦去所有的不快乐. 也只有做你的父亲,我才能在每一次你孤单迷茫受到伤害的时候,把你的小脑瓜搂紧怀里,告诉你,有我在. 我一定会成为这
Linus Torvalds 指针
<对话Linus Torvalds:大多黑客甚至连指针都未理解>http://www.csdn.net/article/2013-01-10/2813559-two-star-programming "不懂指针"的开发者代码示例: 1 typedef struct node 2 { 3 struct node * next; 4 .... 5 } node; 6 7 typedef bool (* remove_fn)(node const * v); 8 9 // Rem
阅读Linus Torvalds的自传《只是为了好玩》中......
最近在阅读Linux之父Linus Torvalds的自传书,感觉挺好的.幽默地总结了一些自己和Linus大神的相似之处: 1.父亲都是共产主义者.当然,我父亲年轻时候并没有强烈加入共产党的意愿,更多地是出于工作上的原因,才加入的. 2.我和Linus大神都对communism保持一定的反思精神.这倒不是为了反对而反对,这么说吧,人创造的东西,或许出发点都是善意的,但是当理论遇到实际问题的时候,实际的走向,却不一定完全能按照原先预定的轨迹去运行,可能绝大多数事情都是如此吧.而简单的贴标签售卖甚至
TFS 10周年生日快乐 – TFS与布莱恩大叔的故事
今天看了一下Brian Harry大叔的博客,才发现2016年3月17日,是Team Foundation Server的10岁生日. Today marks the 10th anniversary of the day we shipped the first version of TFS – TFS 2005. It doesn’t seem that long ago but we sure have come a long way. The other day I recorded a