Git的诞生

xingyun86 2018-6-2 1658

十多年前,BitMover决定停止BitKeeper对Linux核心开发的支持,顿时Linux核心开发受到严峻的挑战。Linus Torvalds整个周末不见人影,隔周却如变戏法般的带着Git出现。

Linus Torvalds在2002年起,使用BitMover的版本控制软件BitKeeper管理Linux核心开发,而因为BitKeeper除商业付费版本,仅提供可免费使用但不允许修改释出的精简版本,引起开源社群的不满,如自由软件之父Richard Stallman也严厉批评Linus Torvalds使用非自由软件开发Linux核心。

在2005年Samba文件服务器开发人Andrew Tridgell写了链接BitKeeper存储库的简单程序,被BitKeeper创办人Larry McVoy指控对BitKeeper进行逆向工程,因此决定停止BitKeeper对Linux的支持。顿时Linux核心开发受到严峻的挑战。而Linus Torvalds秉持“自己的版本控制自己写”精神,整个周末不见人影,隔周却如变戏法版的带着Git出现。在Git诞生十周年的近日,Linus Torvalds接受Linux基金会的访问,谈论他对版本控制系统的想法及开发Git的过程。

为何你创造了Git?

我一直不喜欢做源代码管理,我觉得那是计算机领域中最无趣的一件事(也许数据库管理跟它有的比),我非常讨厌源代码管理。不过BitKeeper(简称BK)出现后,改变我对源代码控制的想法。BK做对了大部分事情,它在本机端有一份完整的存储库,而且采取分布式的做法非常了不起。分布式源代码控制解决了源代码控制常碰到的问题——谁有资格改变源代码。借着提供存储库给每个使用者,BK解决了这个问题。

不过BK也有些缺陷,比方说某些技术决策引起了些问题(像是让人头痛的重新命名),但最大的缺点在于BK不是开放源代码,所以很多人不愿意使用。有几位我们重要的维护人员因为BK可以免费用在开源项目上而使用它,但BK始终没有普遍的被使用,尽管他帮助了Linux核心开发,但BK仍有不足之处。

Andrew Tridgell违反BK使用原则,对BK开始进行逆向工程。我花了几个礼拜(或是几个月),居中协调Tridgell跟Larry McVoy,不过显然没有多大帮助,从那一刻起我决定放弃使用BK,但是我也不想回到以前没有BK的日子。在那时虽然也有一些源代码控制软件想采用分布式的做法,但都没有成气候,它们离我想表现的要求还差一大截,同时我担心源代码完整性即作业流程上的问题,索性决定自己写一个版本控制系统。


你是怎么做到这件事的?花了整个周末熬夜还是在一般时间内把Git搞定?

其实,你可以去Git源代码的存储库看它如何逐渐成形。我大概花一天让Git能达到自己管理自己的程度(self-hosting),之后我就开始用Git跟Git提交程序代码了。我的大部分工作是在白天完成的,不过也有几天工作到深夜。我觉得最有趣的地方在看到Git如何快速的成形。在Gi t树的第一次提交并没有写很多程序,但是已经实现作出提交程序代码的基本功能。写Git并不会很难,比较难的是思考如何Git组织档案的方式。

我想强调,Git从无到有大概花了我十天(包含我第一次用Git提交核心程序代码),而且我也不是焚膏继晷的完成Git。这都取决于对Git的基本概念是否很清楚,早在着手写Git前,我已经看到其他源代码控制系统的缺陷。我只是不想重蹈覆辙。


Git有满足你的期待吗?它有哪些地方不足?

我很喜欢Git,他运作的非常好而且满足所有我的需求。他掌管了许多计划并且以超乎想象的速度在成长。不过看看CVS和RCS还存在着,可见在使用者转用其他源代码控制系统上还是有些惰性,不过迟早有一天Git都会取代它们。


你认为Git被广为接受的原因在?

我想很多人使用其他源代码控制软件都碰到跟我类似的问题,而这些问题让我十分火光,在使用上要修正的几个小问题就让人抓狂。在Git未问世前,没有比较好的解决方法。许多人还不清楚分布式版本控制的好处,甚至还为此争吵不休。不过只要用过Git,一定无法回头用其他东西。因为用Git备份源代码简单又可靠,而且也不必担心测试存储库是否会影响到中间存储库。


Git会一直存在吗?在未来十年内会有其他版本控制系统出现吗?你会不会是那个系统的开发者?

我不会是那个系统的开发者,也许在十年内我们会看到类似的新东西出现,不过我敢保证,它一定会长得很像Git。Git并非十全十美,但是Git的基本设计做得非常完整,这是其他源代码管理做不到的,我没有装客气。


为什么Git在Linux上运行的很顺?

一部分原因在于Git是为我们的工作流程量身打造,另一部分是我提了很多次Git的分布式设计,再重复几次都不为过。Git是为有效处理庞大的项目而生,像是Linux。它可以处理大家以前觉得很“困难”的事,不过那些对我来说像是家常便饭。

举个例子,使用其他源代码控制系统要执行合并是非常麻烦的事情,你得精心策划,因为合并兹事体大。这我没有办法接受,因为我每天都要执行一堆合并。使用Git合并只需几分钟。所以基本上Git是为了满足我的需求而写出来的。


很多人说Git是给聪明人用的,Andrew Morton(Linux核心开发者)甚至说:“Git的设计让使用者觉得自己比想象中的笨。”,对此你有什么样的回应?

这种说法在过去说得通,不过现在不再是了。大家会这样想会有一些原因,但是只有一个原因站得住脚:“同一件事情,Git提供太多方法达成。”

你可以使用Git去做很多事。Git有许多规则,规范你该如何使用Git,而这些规则跟技术关联没有那么强,反而比较着重在多人协作下如何发挥Git的功能。Git是个强大的工具,所以很多人一开始被它吓到,而因为Git的功能是如此强大,每次你都可以用不同的方法完成相同的事情。但一般来说,学习Git的最好方法是从基本开始,熟悉基础后再去摸索不一样的东西。

Git被认为很复杂是有它的历史因素在。其中一个原因是一开始他的确很复杂。一开始使用Git做核心方面的工作时,用户需要配置一些脚本。当时大部分工作都花在开发核心上,比较没有精力去顾及让Git易于使用。诚然,Git是很复杂,不过那也只是头一年左右的事情。

另外一个大家觉得他很复杂的原因是Git与众不同。很多人用CVS十几年,但Git跟CVS可是天差地别,不仅概念上不同,指令也不一样。Git从来没有想要模仿CVS,甚至想要反其道而行。如果你用类似CVS系统一段时间了,会觉得Git很复杂,甚至特立独行。比方说,为什么Git的版本编号不是"1.3.1",像CVS那样递增的数字不是很好吗?为什么编号是恐怖的40字符HEX吗?

但Git并不是特立独行,而是这些改进是必须的。某些人觉得复杂的原因是时代的递嬗,使用CVS的时代已经过去了。现在很多工程师也许会搞不清楚CVS的操作方法,只是因为他们先学了Git。


如果没有Git,Linux核心的发展会跟现在一样好吗?

不过一定会有人写出类似Git的分布式源代码控制系统,我们绝对需要像Git的东西。


你对GitHub有什么样的想法?

GitHub提供很棒的程序代码托管服务,这方面我对它没有什么抱怨,不过我对GitHub比较有意见的地方是,GitHub作为一个开发平台,他的提交,拉取要求、议题追踪等功能运行的不是很好。GitHub有太多限制,跟核心比还差得远。一部分的原因是核心如何被建立,另一部分原因是GitHub的接口会养成用户的坏习惯。因为GitHub接口的设计,在GitHub上提交会有质量不好的提交讯息等。在这方面他们做了些改善,不过永远不会像Linux核心的东西。


你觉得Git/GitHub最有趣的用途是?

使用它们建立一个新的项目非常简单。以前要开启一个项目很让人头疼,但是用Git或GitHub去建立小型项目实在轻而易举。



×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回