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
翻譯得太爛了,術語上的有磁碟塊設備(block device)被翻譯成阻塞設備,其他翻譯錯誤數不勝數