SVN中的Branches分支以及Tags標籤詳解與應用舉例

1.關於SVN

SVN 是Subversion的簡稱,在軟件開發中,咱們常常用於版本控制和源代碼管理。 服務器

咱們常用的幾個SVN工具包括: svn

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

VisualSVN,這是一個Visual Studio的插件,能夠便於開發者在VS中方便的執行遷入遷出的工做,這個工具是須要付費的,具體能夠去http://www.visualsvn.com/visualsvn/download/下載試用版。 工具

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客
VisualSVN Servers,這是一個搭建SVN服務器端的工具,使用這個工具還能夠很輕鬆的建立用戶和用戶組並進行權限控制管理,包括了Windows驗證和用戶驗證的機制,還能夠記錄日誌等,不過免費版並不包括完整的功能,但做爲經常使用的版本控制工具是徹底能夠知足的,具體能夠去http://www.visualsvn.com/server/download/下載。也能夠不經過這個工具搭建服務器端,具體能夠參看以前個人一篇日誌:Subversion + VisualStudio 2008實戰(一)。 測試

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

TortoiseSVN,這是一個能夠集成到Windows資源管理器中的Shell程序,能夠方便的幫助咱們執行各類命令,這是一個免費的工具,在VisualSVN失效的時候,咱們依然能夠針對項目的文件夾和文件執行簽入遷出等各類工做,下載地址:http://www.visualsvn.com/visualsvn/download/tortoisesvn/ 。 spa

2.關於SVN中的Branches與Tags

在版本控制的系統中,咱們常常須要對開發週期中的單獨生命線做單獨的修改,這條單獨的開發生命線就能夠稱爲Branches即分支。分支常常用於添加新的功能以及產品發佈後的bug修復等,這樣能夠不影響主要的產品開發線以及避免編譯錯誤等。當咱們添加的新功能完成後能夠將其合併到主幹中。
而Tags即標籤主要用於項目開發中的里程碑,好比開發到必定階段能夠單獨一個版本做爲發佈等,它每每表明一個能夠固定的完整的版本,這根VSS中的Tag大體相同。
SVN中的Branches以及Tags常常容易混淆,由於在TortoiseSVN中建立方法是一致的,並且它們都是經過存儲相似Linux中的lunch快捷方式同樣,只是建立了指向某個版本的連接,而不會真正將此版本的內容複製到分支或者標籤中,這樣既能夠節省空間,也能夠很快速的建立。
爲了便於建立分支和標籤,咱們習慣於將Repository版本庫的結構佈置爲:/branches,/tags,/trunk。分別表明分支,標籤以及主幹。
還有一點值得注意的是,SVN不推薦在建立的Tag基礎上Revision,這種狀況應用Branches,由於Tag通常保持不變不做任何修改。 插件

3.建立Branch分支或者Tag標籤

當按照推薦的結構建立的版本庫,建立分支以及Tag是很容易的。
在個人SVN服務器上建立了一個版本庫Test,結構以下:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

在個人本地簽出checkout,添加一個文件test.txt,而後提交。
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客


加入這個時候咱們須要發佈一個版本的文件,同時有可能其餘人會修改,但咱們不能影響當前的文件,只能在其修改好後再合併,這種狀況下咱們建立一個分支。
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客 版本控制

這個時候咱們能夠發現本地的trunk文件夾的SVN屬性的URL已經被Switch到建立的版本的地址了:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

執行SVN更新命令,能夠查看到,本地branches文件夾下新增文件夾v1.0以及文件夾裏面的文件v1.0。 日誌

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

4.修改分支和使用合併Merge功能

修改branches/v1.0下面的文件test.txt,添加一行modified in branch v1.0.而後簽入到SVN服務器中: server

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

因爲剛纔咱們已經將trunk的SVN版本庫URL轉換到對應的版本,因此這個時候更新trunk文件夾能夠看到更新的test.txt文件。
爲了做測試,咱們將trunk文件夾switch至對應的trunk地址:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

當switch成功後,咱們能夠看到trunk下test.txt文件的內容並無任何的更改,這正體現了剛纔咱們所說的在分支中的修改不會影響到主幹。
下面修改trunk文件夾下的test.txt,添加一行modified in trunk.而後簽入到SVN服務器中:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

最好咱們將實現一個重要的功能,就是Merge合併功能,將分支合併到主幹中,這也是在團隊軟件開發中咱們常常要使用的功能。
在TortoiseSVN的Revision Graph中能夠查看trunk的版本變化圖,以下:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

從上圖能夠得出,在版本10的時候咱們建立了分支版本/branches/v1.0,且SVN版本爲11,在版本11基礎上咱們對分支進行了修改因而有了版本12,咱們再對trunk下的文件進行修改因而有了版本13,整個SVN目前的版本就爲13,這與咱們剛纔作的修改是相吻合的。
下面將分支v1.0合併到主幹中。
按照咱們目前的狀況,選擇第二種:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

選擇v1.0:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

而後,以下:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

在咱們的此次合併中確定會產生問題,由於咱們對test.txt文件進行了兩次修改,於是會產生衝突Conflict,但這在實踐中是不該出現這種狀況的,由於創建的分支目的就是修改那些在主幹中不會被修改的文件,以便修改完成後合併到主幹中。不過不要緊,咱們這裏僅是演示而已,因此只需處理下衝突,手動的將其合併(這在實際中不該該這樣不然失去了分支的用途了):
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

這個時候能夠看到咱們的test.txt文件已經按照我剛纔手動處理衝突實現了:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

而後將trunk簽入到版本庫中:
SVN中的Branches分支以及Tags標籤詳解與應用舉例 - 三瘋 - 翔博客

若是咱們再去查看branches\v1.0下的test.txt文件它的內容依然是最初在trunk中編輯的內容。
另外再次強調一點:在實際操做中咱們不會對一個分支文件在主幹中再次進行修改,不然會形成一些衝突,這樣就失去了分支的便利性了;Tag的建立與分支是類s似的,只不過Tag每每僅用於標識特定版本,而不會用於bug修復,增長新特性等情形。 資源

相關文章
相關標籤/搜索