如果你有用過一些 source control tool,卻從沒用過 branch 的機制,可以讀讀 Eric Sink 的這篇文章:Source Control HOWTO Chapter 7: Branches

就我的觀點,可以從三個方面來評量 source control tool 的好壞:穩定性、速度、branch 機制。老實說,前兩個條件是最基本的要求,如果你認為某個版本控制系統不穩定或是速度太慢,別用它!因為它帶來的麻煩會比好處還要多,況且你應該有其他更好的選擇。如果穩定性及速度都能符合要求,要比較的就是 branch 機制是否好用。

事實上,談到 branch 不可能不談到 merge,而且那才是麻煩的地方。諷刺的是,所有的版本控制系統都誇稱產生一個新的 branch 有多容易,branch 可以帶來多少多少的好處,卻絕口不提在 branch 間 merge code 有多麼地麻煩。正如同 Eric 的比喻,一個新的 branch 就如同一個小孩,如果有人跟你說生個小孩有多快多方便,卻沒告訴你照顧一個小孩有多麻煩,你會相信他的話去生個小孩嗎?

目前我知道的版本控制系統只有 AccuRev 針對另人頭痛的 merge 問題提出獨有的 stream-based architecture。我最喜歡的 Perforce 不知道是否會在這方面做改進,而對於 subversion 就只能期待有一些 open-source project 來實作這方面的功能。