分支的基本概念就正如它的名字,開發的一條線獨立於另外一條線,若是回顧歷史,能夠發現兩條線分享共同的歷史,一個分支老是從一個備份開始的,從那裏開始,發展本身獨有的歷史(以下圖所示)
⑴建立分支
假設目前咱們版本庫中的項目的佈局以下圖:
如圖所示,咱們的項目放在了trunk(主線)目錄,另外還有branch(分支)和tags(標籤)目錄,這樣的佈局是爲了更清晰的區別主線、分支和標籤三者的位置。
subversion對分支和標籤是經過複製一份最新的版本庫的快照來實現的。
開始建立分支:
在咱們CheckOut的主線目錄(trunk)上,右鍵點擊而後選擇「Branch/tag…」
在彈出的窗口中,將To Url 指向branch目錄並輸入分支的具體目錄名,這裏是mybranch1.0,咱們即將建立的分支便存放於此處,點擊OK。
Update一下本地的branch目錄,你就能夠看到你剛剛建立的分支「mybranch1.0」,這樣一來咱們的分支就建立完成了。
建立分支的最大的目的就是跟主線進行並行開發的時候不影響主線的開發。
由於你在分支上所作的提交都只存於分支上,主線上的Update是看不到分支的修改的。以下圖所示,trunk只能看到r344的版本,並看不到r343的版本。
(何時應該使用分支呢?例如你接到了一個任務,完成這個任務須要三四我的的合做,大家之間須要共享資源,那們就能夠建立一個專爲此次任務的分支,參與這次任務的人員則在分支上作開發,等完成以後再合併到主線上,纔不會出現將實現了一半的不完成功能也提交到主線上,影響主線的正常工做。又或者本身須要一個較長的開發週期來完成任務,這麼長的時間內若是一直沒有將資源進行提交,萬一丟失了就前功盡棄了。固然分支不是隻用於此類狀況,還有其它不少種狀況也能使用分支來達到目的。)
使用分支須要注意,因爲長期的獨立開發,可能會在合併回主線時出現較多的衝突。因此在支線上開發間期若是發現主幹有更新,並且這個更新有可能未來跟你產生衝突,那你能夠先將主線的內容合併到分支上。已免等到作了大量修改再來更新。(其實此過程跟分支合併到主線上是同樣的操做,只是目的地不一樣。)
例如咱們在主線上的版本爲3,咱們如何將此版本的信息合併到分支上呢?
在分支的根目錄上右鍵點擊,選擇「TortoiseSVNMerge…」。
在這裏咱們必需先弄明白一個合併背後的關健概念
合併的過程當中發生的全部事:首先兩個版本庫樹的比較,而後將區別應用到本地拷貝.
這個命令是包括三個參數的:
1. 初始的版本樹 2.最終的版本樹 3一個接收區別的工做拷貝。
弄明白這些概念以後咱們繼續往下操做。
在彈出的窗口中,選擇主線目錄和其版本號(初始的版本樹),再選擇主線目錄和最新的版本號(最終的版本樹),這裏也能夠是某一個版本號但應該比初始的版本樹的版本號要高,接收區默認爲你右鍵所指的目錄,這裏是mybranch1.0。
在合併以前咱們能夠經過點擊「Unified diff」,查看兩版本樹之間全部文件的內容的變化,「diff」顯示出有發生變化的文件列表,「dry run」能顯示真正合並時的狀態信息,但並無作任何的合併操做。
咱們點擊「Merge」。
在點擊「Merge」,合併後的文件(即對分支上的文件補上了主線上修改的內容),如無衝突則能夠在分支上像其它文件同樣使用了,若是合併後的內容不滿意,能夠經過撤銷來取消此次的合併操做,前提是未對合並後的文件作提交操做。
分支合併到主線跟從主線上合併內容到分支上相似
不一樣的是
一、開始的版本庫是分支建立的版本
二、結束的版本庫是完成因此開發工做以後的版本
三、應用的目的是主線目錄
關於轉換工做拷貝、標籤(標籤在Subversion中跟分支是相同原理的,一個不去作任何的修改的分支就是版本庫某一時刻的一個快照,至關於爲某一個版本作了一個標籤)佈局