最近看了很多 Git 與 SVN 的比較,很多都說 SVN 做分支很慢,不知道是從何說起。有可能大家都不清楚,SVN 做分支的正確步驟,特此介紹一下。
SVN 服務器后台使用 Berkeley DB 數據庫進行數據保存。當前版本、發行版本、分支版本,在 SVN 客戶端處中一般只是當成普通目錄。SVN 客戶端有很多種,客戶端處數據如何保存,沒有明確的說法。
比如,SVN 版本庫從客戶端上看其根目錄為:
http://zhegui-svn/svn
幾個主要子目錄為:
1) | 當前開發主線目錄 | http://zhegui-svn/svn/trunk/ |
2) | 之前正式發行版目錄 | http://zhegui-svn/svn/releases/ |
3) | 之前或現在各分支版目錄 | http://zhegui-svn/svn/branches/ |
4) | 每日構建目錄 | http://zhegui-svn/svn/builds/ |
創建分支,或創建發行版,只是一個目錄復制操作。由於SVN服務器端的數據是保存在 Berkeley DB 數據庫里,因此,目錄復制,在數據庫層面,只是保存一條“在某個目錄下創建一個子目錄,新的子目錄的內容,等同於另一個目錄的那個版本”信息。
那些認為 SVN 復制分支,需要復制整個目錄里所有文件的人,或者說出“拉分支的時間較慢,因為拉分支相當於copy”之類話的,都可以從頭學習數據庫了。反正稍微熟悉一點數據庫的一些基本概念的技術人員,都不會設計出“分支要在服務器上復制整個目錄里所有文件”這么個邏輯來。
以下是操作步驟舉例(使用的 SVN 客戶端工具軟件是 TortoiseSVN ):
之后選擇目錄復制的源頭、源頭目錄版本(可以不用最新版,最新版可能有人新加了一個功能,還沒做完)、目的地目錄:
上述截圖中,將項目的主開發目錄 http://zhegui-svn/svn/trunk/zhegui_print_upload 對應版本 29423 ,復制到 http://zhegui-svn/svn/releases/zhegui_print_upload-v3.0,即完成了發行版本的服務器上復制功能。一般再大的項目,都是秒級完成。
實際的軟件項目開發中,只有以下目錄用得比較多:
1) | 當前開發主線目錄 | http://zhegui-svn/svn/trunk/ |
以下目錄用得比較少:
2) | 之前正式發行版目錄 | http://zhegui-svn/svn/releases/ |
3) | 之前或現在各分支版目錄 | http://zhegui-svn/svn/branches/ |
4) | 每日構建目錄 | http://zhegui-svn/svn/builds/ |
這是因為,創建新發行版本,只是在 SVN 服務器上進行目錄復制,相當於只是在Berkeley DB 數據庫保存一條“在某個目錄下創建一個子目錄,新的子目錄的內容,等同於另一個目錄的那個版本”信息。
那把這句話保存在一個文本文件中,也不費什么事。
同理,每日構建目錄的存在意義,也不大。
另一方面,如果是軟件產品類開發,有多個不同客戶,可能分別進行 bug 修復,則仍有必要使用發行目錄:
2) | 之前正式發行版目錄 | http://zhegui-svn/svn/releases/ |
希望以上介紹,能幫助到大家。
---------------------------------
本文歡迎轉載,轉載請注明來源:https://www.cnblogs.com/jacklondon/