其實使用 cvs/svn 時,最重度使用的就是 vendor branch,一般用途的版本維護只是基本的功能,無論何種版本控制軟體都可以辦到。我常常得追蹤其他大型軟體計畫的進度,並整合到自己的系統中。往往都是幾十萬行的程式碼,已經非常習慣使用 cvs 來進行這件工作。

使用 svn 後,使用習慣與 cvs 大大不同,分支/標記的概念不太相同,Subversion: The Definitive Guide 第四章節專門講分支與標記,第六章節也提到如何使用 vendor branch。

首先,subverson 建立分支與標記只需要用 svn copy 這個指令。所以我可以設計 vendor branch 為一個目錄稱為 $(svnrepo)/vendor ,另外設計最新的版本都擺在 $(svnrepo)/vendor/current,至於每個版本進到系統後都作一個標記為例如為 $(svnrepo)/vendor/1.0、$(svnrepo)/vendor/1.1 等依此類推。至於實際開發自行修改的則定義為 $(svnrepo)/trunk。

然而,每次有新的 vendor release 都會造成十分的痛苦,因為必須合併進 $(svnrepo)/vendor/current 中,才能正確的進行版本的對照與控管,並需注意修改的檔案、刪除的檔案以及新增的檔案才行。有個工具稱為 svn_load_dirs.pl 這是專門用來處理這些 dirty work 的 perl script。然而 svn_load_dirs.pl 實在難用到…

本文由於轉移系統失誤,內文遺失。