点这里

十年前的这一周,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 访谈的更多相关文章

  1. Linux之父Linus Torvalds:讨厌C++

    "Linux内核的创始人Linus Torvalds最近在一封邮件中说明了内核开发需要使用C语言而非C++的理由.在庞大的项目中,人们对不是自己开发的模块并不了解,能快速理解其他模块中函数的 ...

  2. 那些年,Linus torvalds大神喷过的技术

    Linus Torvalds 被认为是最伟大的程序员之一,因为他写出了使用最广泛的软件,如 Linux 内核和 Git 版本控制系统.但是他这个人经常因为讲话带有情绪,甚至是因为带有脏话的意见而饱受非 ...

  3. Linus Torvalds来自开发商的消息:成就,不定

    于IEEE 计算机学会在接受记者采访时, Linux父亲解释了他的哲学了操作系统的成功背后.Linus Torvalds在接受IEEE采访计算机学会谈过:"Linux这项新技术是不是它的,但 ...

  4. TFS 10周年生日快乐 – TFS与布莱恩大叔的故事

    今天看了一下Brian Harry大叔的博客,才发现2016年3月17日,是Team Foundation Server的10岁生日. Today marks the 10th anniversary ...

  5. Windows 10 周年更新正式版下载 + win10 快捷键

    Windows 10 周年更新正式版  360云资源总汇(施工中): https://yunpan.cn/c6Svi7Az52XBs (提取码:e5dd)今后提到周年更新版.1607版或RS1版,都是 ...

  6. [转帖] 大神 Linus Torvalds 语录

    My name is Linus Torvalds and I am your god.我的名字是Linus Torvalds,我是你们的上帝.(在1998 Linux大会上的自我介绍) If you ...

  7. Linus Torvalds: 成功的项目源于99%的汗水与1%的创新

    2017年2月15日,在加利福尼亚州的开源领袖峰会上,由Linux基金会执行董事Jim Zemlin进行的一次采访中,Torvalds讨论了他如何管理Linux内核的开发以及他对工作的态度. Linu ...

  8. GIT → 10:基于IntelliJ IDEA的Git 操作

    GIT → 10:基于IntelliJ IDEA的Git 操作

  9. Linus Torvalds正式宣布Linux Kernel 5.1RC2 发布,相当正常

    导读 Linus Torvalds刚刚发布了Linux Kernel 5.2-rc2,这是继上周关闭合并窗口和随后的RC1之后的第一个内核测试版本. 在本周合并后的窗口活动中,Linus评论道,“嘿, ...

随机推荐

  1. C基础 数据序列化简单使用和讨论

     前言 C中对序列化讨论少, 因为很多传输的内容都有自己解析的轮子. 对于序列化本质是统一编码, 统一解码的方式. 本文探讨是一种简单的序列化方案. 保证不同使用端都能解析出正确结果. 在文章一开始, ...

  2. 对云风 cstring 第二次解析

    前言 从明天起 关心粮食和蔬菜 我有一所房子 面朝大海 春暖花开 本文前提条件 1.了解 posix 线程 2.了解 原子操作 3.具备简单C基础,或者 你也敲一遍. 如果上面不太清楚,你可以翻看我以 ...

  3. Redis 五:配置主从复制功能

    redis的主从复制事实上是非常简单的一件事情,甚至比mysql的配置还简单,因为基本不需要在主服务器上做任何操作 我们在同一台服务器上开不同的端口进行测试操作(安装部分就不说啦,前面的文章有::) ...

  4. Eclipse常用快捷键使用

    Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.     1. [ALT+/]     此快捷键为用户编辑的好帮手 ...

  5. 你必须懂的 T4 模板:深入浅出

    示例代码:示例代码__你必须懂的T4模板:浅入深出.rar (一)什么是T4模板? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit. T4文 ...

  6. SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)

    临时表:Test /****** 对象: Table [dbo].[Test] 脚本日期: 05/10/2013 11:42:07 ******/ SET ANSI_NULLS ON GO SET Q ...

  7. Notes of the scrum meeting(12.7)

    meeting time:18:30~19:10p.m.,December 7th,2013 meeting place:3号公寓一层 attendees: 顾育豪                   ...

  8. JS多种方法实现随机颜色;

    JS随机颜色有很多地方要用到:比如大家看到很多标签连接都是五颜六色.实现随机颜色的方法有多种,下面来看看具体的实现代码: 方法一: var getRandomColor = function() { ...

  9. c语言编程之二叉排序树

    二叉排序树,又称为二叉查找树.它是一颗空树,或者是具有下面的性质的二叉树: 1.若它的左子树不空,则左子树上所有节点的值均小于它的根结构的值: 2.若它的右子树不空,则右子树上所有节点的值均大于它的根 ...

  10. iframe 传值问题

    当一个页面中插入了iframe或者由不同的框架组成(fieldset)时,这种情况下,需要处理的业务逻辑比较常见的就是数据进行交互了 1.页面中插入了iframe情况 由于页面中插入了iframe,那 ...