這是一套快速入門指南,它可以幫助您在每天的軟件開發(fā)工作中充分使用Subversion。
使用全面的存儲庫布局
安排存儲庫布局的方法有很多。由于分支和標簽是普通目錄,因此需要在存儲庫結(jié)構(gòu)中對它們進行說明。
Subversion 項目官方推薦采用“項目根目錄”方式,項目根目錄代表項目的錨點。“項目根目錄”包含三個子目錄:/trunk、/branches 和 /tags。單一存儲庫可以只包含一個項目根目錄,也可以包含多個項目根目錄。
參考書目: “選擇存儲庫布局”。
提交合乎邏輯的更改集
對存儲庫提交更改時,需確保更改反映單一目的:修復(fù)特定錯誤、添加新功能或一些特殊的任務(wù)。您提交的更改將創(chuàng)建一個新的修訂號,此修訂號可作為此更改的“名稱”使用。您可將此修訂號記載到錯誤數(shù)據(jù)庫中,或?qū)⑺米?svn merge 的參數(shù),這是為了便于今后撤消此更改或?qū)⑺D(zhuǎn)移到其它分支中。
參考書目:第 4 章中的“Subversion 和更改集”邊欄。
靈活使用事件跟蹤工具
嘗試盡可能多地在 Subversion 更改集和您的事件跟蹤數(shù)據(jù)庫之間創(chuàng)建雙向鏈接:
如果可能,在每個提交日志信息中都引用一個特定事件 ID。 在事件中附加信息時(描述進度,或結(jié)束事件),為更改提供相應(yīng)的修訂號。 手動跟蹤合并
提交合并的結(jié)果時,請務(wù)必要撰寫說明合并內(nèi)容的描述性日志信息,類似于:
/branches/foobranch 的修訂版本 3490:4120 已合并到 /trunk 中。
參考書目: “手動跟蹤合并”和“將整個分支合并到另一個分支中”。
了解混合修訂工作副本
工作副本的目錄和文件可具有不同的“工作”修訂版本:這一特性是特別設(shè)計的,目的是允許將舊版本的對象與新版本的對象相混合和匹配。但有一些問題必須注意:
每次執(zhí)行 svn commit 命令后,工作副本都將具有混合修訂版本。剛提交的對象具有新的修訂版本,而其它對象仍為舊的修訂版本。 不允許進行的提交包括: 對不具有新工作修訂版本的文件或目錄不能提交刪除。 對不具有新工作修訂版本的目錄不能提交屬性更改。 svn update 可將整個工作副本統(tǒng)一為一個工作修訂版本,此為上述第 2 點問題的典型解決方案。
參考書目: “混合修訂版本的限制”。
耐心處理大型文件
Subversion 的另一個不錯的功能是在設(shè)計時沒有對它可以處理的文件大小進行限制。文件以“流”的形式在 Subversion 客戶端和服務(wù)器之間雙向發(fā)送,并且在網(wǎng)絡(luò)的兩端通常占用較少的內(nèi)存。
當然,還需要考慮大量的實際問題。盡管無需擔(dān)心 KB 級別的文件(例如,典型的源代碼文件),但提交大型文件可能需要花費大量時間和占用大量空間(例如,幾十個或幾百個 MB 大小的文件)。
開始時,請記住 Subversion 工作副本將所有版本控制文件的原始副本存儲在 .svn/text-base/ 區(qū)域中。這意味著工作副本占用的磁盤空間至少是原始數(shù)據(jù)集的兩倍。不僅如此,提交文件時,Subversion 客戶端還需遵循(現(xiàn)在不可調(diào)整)某種算法:
將文件復(fù)制到 .svn/tmp/(可能需要花費一定時間,并且暫時占用額外的磁盤空間) 在臨時文件和原始副本之間,或者是臨時文件和空白文件(如果新添加)之間執(zhí)行二進制差異操作。(可能會花費很長的時間進行計算,盡管終只有少量數(shù)據(jù)會在網(wǎng)絡(luò)中發(fā)送) 將差異發(fā)送到服務(wù)器中,然后將臨時文件移入 .svn/text-base/
因此,盡管理論上對于文件的大小沒有限制,您需要知道大型文件可能會需要您在客戶端緩慢處理的同時耐心等待。但是,您可以放心的是,與 CVS 不同,這些大型文件不會使服務(wù)器出錯,或者是影響其他用戶。