2008-07-09

錯綜複雜的 Release Branch

seamxr曾說過一個 Development branch 的故事,我很喜歡!我同意 seamxr 說的:『Branch 不用錢,儘量開!』但是要注意,開 branch 的目的,不是要任它亂長的,一旦讓它長成一棵盤枝錯節的大樹,那很可怕滴! 


從前從前,有一個軟體產品,叫它 XYZ 吧!

XYZ 一炮而紅,廣受歡迎,為了爭取更大的銷售,XYZ 的產品經理小強決定跨出 Windows 的世界,做個 XYZ for Solaris,Project Lead 小明就從 XYZ for Windows 拉一個 branch,把 XYZ 給 PO 到 Solaris 去;後來,小強發覺 Solaris 不紅,決定再做個 XYZ for Linux,小明就又從 XYZ for Solaris 上拉一個 branch,要 PO 到 Linux。 這時候,這棵 source code 的樹長這個樣子:
XYZ for Windows
└ XYZ for Solaris
└ XYZ for Linux
故事還沒完,精彩的才要開始。 

Linux 才在做,已經在賣的 XYZ for Windows 與 XYZ for Solaris,免不了有客戶反應有 bug 要修、有新功能要加,要出好幾個語言版本,更必須要出個 version 1.1 好照顧既有的顧客;同時,評價不錯的 XYZ for Windows,小強也提出 Version 2.0、3.0 的 product roadmap,預計來年上市。甚至,小強還想找個 Hardware Vendor 來「策略聯盟」,推出 XYZ Appliance。小強心想:
反正,每個產品的 code 都差不多,改一改又是一個新產品咩!
新產品愈多,產品線愈大,賺錢愈多的啦! 既然有錢賺,當然也不會吝於找更多人來做 project,於是乎,小明做 Linux、小華做 version 2.0、小美出 hot fix、小麗做 Appliance、還有大雄去做八國語言版,各個 project 分頭進行,大家做得不亦樂乎!這時候,XYZ 產品線的 development branch Release Branch,悄悄地長成這樣了...
(Credit: eleda 1

時間飛逝,問題出來了。 

有一些 code,在不同版本、不同平台的 branch 重覆出現,小明資格老,做 Linux 時發現一些老問題,還會記得要抽空把在 Linux project 改的 code 給 merge 回 Solaris 和 Windows;但小美不熟 code 的典故,出了 XYZ for Windows version 1.1,卻想不到,這在 XYZ 2.0/3.0 Windows、XYZ 1.0 Linux and XYZ Appliance,通通需要 1.1 的 code。 

當樹愈長愈亂,人們都在問,怎麼 XYZ 會愈做愈差咧?

曾經修過的 bug,新版又出現;曾經加過的 feature,新版卻不見。小強每天道歉,不懂怎麼會錯誤連連;工程師們也很悶,明明知道 seamxr 說的對,code 寫好就要趕快 merge 回 main trunk,甚至不同平台就該同時設計一起做,但是盤根錯節的大樹已經長成,每個人只知道自己摸過的那個 branch,沒有人能 merge 回去,也沒有人敢砍掉重練。 

寫這產品線大樹的故事,絕不是反對開 branch,我只是反省目前 project 最教我痛苦的事:花好多時間在各個 branch 裡爬行,就想搞清楚什麼該 merge、或不該 merge,但還是擔心會不會漏了什麼、又多了什麼。

我們之所以開 branch,不是為了開出枝繁葉茂的大樹,而是要從 branch 回到 main trunk,也要定期從 main trunk 下到各個 branch。要減少同時開發/修改功能的混亂,更要讓彼此同步,而不是各自為政。 Branch,是為了要 Merge!

1 comments:

seamxr,  2008年7月9日 下午 9:02  

A configuration manager role might be good to that scale of project.
Refer to: http://en.wikipedia.org/wiki/Configuration_management

張貼意見

Blog Archive

Jonathan Plurking

Blog Measurements

MyHotPost

Google AJAX Feed API 玩弄中

Loading...

  © Blogger templates The Professional Template by Ourblogtemplates.com 2008

Back to TOP