Git 10 周年訪談: KVM維護者Paolo Bonzini講述他與Git的故事
本周是 Linux 創始人 Linus Torvalds 發布首次版本 Git 分布式控制系統的第十周年。這十年來,成千上萬的開源項目開始依賴這種流行的軟件開發工具,并加速形成了現在主導技術創新的協作開發模式。
為了慶祝這里程碑式的成就,我們請開源項目維護者和領導者來和我們分享這周是怎么,為什么選擇使用 Git 的。同時也會分享他們的一些 Git 成功小故事和一些便于更好使用 Git 的小技巧。
Linus Torvalds 本人在昨天已經開始了這系列的訪談。今天,我們將采訪 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年了!
Linux Story譯文鏈接:http://www.linuxstory.org/git-success-stories-and-tips-from-kvm-maintainer-paolo-bonzini