今天,我们将采访 Paolo Bonzini,一位来自 Red Hat 的首席软件工程师,QEMU 的贡献者和 KVM的维护者——Linux 的一种基于内核的虚拟机。同时让我们继续关注他们在 Qt,Drupal,Puppet,Wine 和 Tor 背后的 Git 故事吧!

Linux.com:为什么KVM要使用Git呢?

Paolo Bonzini: 因为 KVM“仅仅”只是一种 Linux 内核的子系统,所以,我们使用 Git 时就要像内核的其他部分一样。我目前是做整体的维护,所以我应用补丁(我的以及其他人的)和那些已经被我的 submaintainers 审查及测试过补丁的,被“pull requests”过的程序。我的 tree 有三个分支:一是为了准备当前 Linux 版本的补丁,二是为了准备下一个 Linux 版本的补丁,三是为了那些应该准备好下一个 Linux 版本但是又并没有被测试完全的补丁。

但是你不能单独只使用 KVM,你需要一些其他使用它的代码,而且那就是为什么大多数 KVM 的贡献者也在使用 QEMU。考虑到 Git 是怎样使用的,QEMU 和 Linux 的使用大体相似。现在只有一个人,Peter Maydell 在致力于官方 QEMU 库;补丁大都来自于通过“pull request”的 submaintainers。我们发现这种模式很有效果,更厉害的是,peter(不同于Linus Torvalds,他自己也是一个 submaintainer)会自己给自己提供“pull requests”!

你觉得是什么让Git成为一种伟大的工具?

Paolo Bonzini: 答案很显然是它本身的分布式特性。它允许 submaintainers 平行地工作并为项目提供一种非常简单层次结构的匹配。然而,很多大型的工作却没有这样的层次结构。

因此,我想说 Git 是很伟大的,因为它提供一种非入侵方式的版权控制方法,而且也因为他为单个项目提供了更简单的版权控制。我为“project”这个词提供了一个非常广泛的意义,比如,它包括了后来在 Linux 或 QEMU 里包括了的功能。你不用联网,不用设置一个服务器,不需要一个单独的目录。你甚至都不用提前告诉这个世界你在做什么。

“git init”或者“git checkout-b”就已经足够开始一个项目或者一个功能,并且你从一开始就能享受到由此带来的版本控制优势。我想,这将更容易形成更好更容易维护的代码。

你们在合作Git上有多少开发人员?

Paolo Bonzini: 一个 QEMU 版本上至少要有大约170人吧。这种分配有很明显的“long tail”:大约其中百分之六十的人会贡献不足五个补丁,而且另外百分之四十的人则只能致力于一个补丁。

KVM 要小一点,每个版本大约25个人。另外,“long tail”效应也同样存在,大约一半的人仅仅只能贡献一到两个补丁。

这种“long tail”却又是非常重要的,因为很多这些“stand-by”补丁会修正 bug。

你个人会使用多少次Git?

Paolo Bonzini: 在我的1000个 shell 命令里面,大约有400都是 git 的!(运行最多的是 vi,略低于200次调用)

KVM 现在最火的 git repo 是什么,又是为什么呢?

Paolo Bonzini: 这很难说。当然了,所有的“形式”最后都变成了最高水平 repositories 的一部分;对于 KVM 来说这会是我的,对于 QEMU 来说这就成官方的了。

但是发展也出现在 submaintainers 的回购中,在 QEMU 的情况下,在实践中它只在那种情况下发生过。对于 QEMU 来说,最火的 repositories 可能是 Peter’s ARM repository  和“阻塞装置” repository. ARM  是非常火的,因为人们可以用很多种 QEMU 来模仿 ARM 模板操作他们,不只是为了虚拟化。阻塞装置非常火是因为…好吧!是因为需要做成千上万的工作!

你使用GIT最钟爱使用的便于记忆的别名都有什么?

Paolo Bonzini: 我有各种“别名”可以用来简化一些git问题。这里有些最简单的:

changes = diff --name-status -r
diffstat = diff --stat -r
whatis = show -s --pretty='tformat:%h (%s, %ad)' --date=short
pwhatis = show -s --pretty='tformat:%h, %s, %ad' --date=short

这两个”-r”好多年都没有很重要,但是这两个别名已经有8年历史了,我从来没有因为改变他们感到烦恼。这个名字的“改变”出自Arch,一个我转换 git 的分布式版本控制系统。”whatis”和”pwhatis”在一个 email 上传递了 commit id 给一个可以复制的格式。”pwhatis”是用来经过时插进去的,”whatis”工作在 parentheses 的外部。当讨论到一个补丁时,在涉及到 past commits 方面它可以帮到我们很多,而且它可以很好的使用一个一致的格式(ID,主题,日期)。

有什么Git成功的故事可以分享的呢?

Paolo Bonzini: 我使用它使用得太多让我不能想起任何成功的故事。它只是一个你日常使用的可靠的工具,但是没有它你不能继续生存下去。可能这已经可以看做是一个成功的故事了吧!?

你还想说些什么其他的事情来为10周年庆作下印记呢?

Paolo Bonzini: 只是想对我以前的同事 Jeff Rose 大叫一声庆祝一下,他说服了我去转换 git。那可以追溯到2007年了!