2007年1月8日星期一

想寫點關於Bazaar的文章

之前我提過仍有不少公司及OSS仍使用CVS作版本控制,故在Subverison正逐步取代CVS的一天,那不算什麼落伍的事,但若非為節省將CVS轉移的時間,或拍擋不願學習其他的版本控制系統,實在沒必要學習CVS,不過Subverison又真的是必然的選擇嗎?

在05年五月左右聽到Linus Torvalds決定為Kernel的開發制作一套新的版本控制系統籍以取代Bitkeeper,自那時起開始關注那套叫做Git的軟件,期望能幫忙解決以往進行Kernel移植所遇到的困難。

個人單打獨鬥還好,與人合作的代碼管理就問題重重。代碼太多,而且要經常加入不同類型的patch,不標名來源,以及那些屬於自己的修改,很快就會 亂套,問題出來時往往無法分辦誰是誰非。想以CVS管理Kernel只會是場惡夢,要留心注意的地方太多,分枝的困難令patch的管理難以達到,而且進 行更新代碼的命令的速度也慢得可怕。

為了代碼的質素,不得不做版本控制,最低限度會知道所收到的代碼有多恐怖,如何應變有個想法。後來又想了不同的方法管理,沒一個行得通。模仿Kernel的開發是最理想的,但提議公司買Bitkeeper的成功機會渺茫……

故此對Git投放了不少的時間,那是我第二次接觸分散式的版本控制系統(第一次是Bitkeeper),因為跟CVS的概念不一樣,而且仍在開發中,說明文件並不齊備,礙障是挺多的。不過結論是值得的,作為分散式的版本控制系統的Git,確有集中式管理不能比擬的優點。

首先它不用依懶固定的伺服器,用家亦能離線操作。方便那些沒自己的伺服器,卻又想軟件代碼在自家不同的電腦上同步的開發者。雖然我有自己的伺服器,但有些私人及公司有關的東西要盡量避免放在這些機械上,而且搬家及炒機的經驗太過豐富了,總是有點不太放心……

另外簡單的分枝管理及代碼合拼,讓協助開源軟件的開發,如提供patch等工作較易管理。除此以外,遇上要為私人的目的修改開源軟件,同時要保持與最新代碼同步的情況時,這項功能亦能有所幫忙。

舉一個較易明白的例子,Wordpress內的頁面佈局全寫死在PHP代碼裏,即使想改變的只是個別欄位的位置,也非修改代碼不可。問題來了,若要 進行更新,自己所修改的代碼不就會被覆蓋掉嗎?修改一二句還可以在其他地方記錄下來,大量修改的話就唯有與原來的代碼跑一次diff,甚至有人提出要有放 棄更新的想法。

我的解決之道是先把原來的代碼用Git管理,開一條分枝存放自己的網頁,當要更新時,就拿最新代碼再開一條分枝,然後與自己的分枝合拼,若沒有發生衝突,如大家均沒修改同一行代碼,Git一般都能順利地融合二邊的修改。

大部份由我所管理的網頁都已經轉用Git管理,其他的就等有空時轉過去,但有一類項目是難以用Git管理,就是支援Windows的跨平台軟件項目,因為Git在Windows執行的問題太多了……

windows problems summary

Linux項目就算了,但跨平台的就不得找其他方案了,在試驗了好幾個不同分散式版本控制軟件後,最後選擇了Bazaar作取代方案。

Bazaar與git的設計的理念十分接近,最顯注的分歧在於commit的表示方法,不像git或monotone般採用hash code,而用回revno,對初學而言會簡單一點,可是有git用者認為這個做法不好。其中一個影響是commit的revno可以因為 pull/push而改變,在bug tracking上會造成不便,個人也不太欣賞這點,不過開發人員已經正視這個問題,在想方法解決。

在圖像介面方面,我一般是用qgit配合git使用,所能提供的主要功能是顯示分枝圖。

對於一個分散式的版本控制系統而言,這項功能猶其重要。可惜其他的功能卻較為陽春,大部份工作都要靠自行定義指令解決,更沒有檔案管理員。

Bazaar的圖像介面程式有bzr-gtk及olive二個選擇,前者是插件,加入visualise及annotate二個指令,分個用來顯示 分枝圖、及顯示個別檔中每行每句由何人何時修改。olive則是一個獨立的軟件,現在已經整合到bzr-gtk中,功能是像WinCVS般提供檔案管理, 可是還未完成,比qgit還是差了段距離。

雖然有不足的地方,但個人來說是頗看好bzr的前景,雖然與git的龐大號召力相比顯得不足,但勝在有Windows的跨平台支援,或許能吸引許多像我般的原git用戶,或認為中央管理式的版本控制已無法滿足,正尋求新方法的開發者們。

(在2007-1-9加入)

在mailing list上有個討論是關於做Bazaar T-Shirt的設計,其中有人(Aaron Bentley)提議:

CVS: Atomic commit? What do you mean?

Subversion: Branches? What do you mean?

Git: User friendly? What do you mean?

Bazaar: You mean this, don’t you?

XDD

對前幾者可算是一針見血,不過Bazaar是否就是最佳方案,還要點時間呢。

沒有留言:

Creative Commons License
本網誌Ben Lau製作,以共享創意署名-非商業性-相同方式共享 3.0 香港 授權條款釋出。