在前面我們創建了分支,而且把用戶guest的本地工作副本E:\Temp\ECoupon_tmp從版本庫的主干切換到該分支上。現在用戶guest和其他人可以并行地開發而不影響彼此了,因為分支自創建點那一刻開始就擁有了自己的版本線。
假設現在突然發現主干上的一個重大bug,該bug存在于各個分支,經過修正后需要馬上更新到其他分支。那么問題就來了:難道需要一個個地修改分支上的文件嗎?有沒有更好點的方法?有---那就是svn merge命令。











為了把主干上的更新同步到分支,我們使用svn merge命令,svn merge的命令用法有三種:
A.svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
B.svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
C.svn merge[[-c M]...|[-r N:M]...] [SOURCE[@REV][WCPATH]]
最常用的是第三種,即把當前一個階段內的版本都合并到WCPATH的位置。其中-c M相當于-r M-1 M。下面我們來看如何應用這個命令來集成主干的改變
Step 1:確定要從哪個版本開始~那個版本結束
通常從主干到分支彼此之間的集成不會太頻繁,不要指望能夠一天一次或幾天一次。通常都是在主干的代碼開發完畢,測試通過后才會更新到分支。在此期間可以主干上的開發人員已經進行了多次的提交,為了令到這一時間段內的變化都能夠被分支感知,我們會把這一階段內的所有變化都集成到分支上。
所以集成前的第一步就是使用svn log查看要從哪個版本開始集成。



我們看到分支的創建在版本38,那么我就要從版本號38開始。而在版本號38之后主干上又發生了什么改變呢?














可以看到在版本38之后,主干上一共發生了三次提交。那么集成的結束版本就是41。
Step 2: 執行集成





我們告訴SVN,把從版本號38開始到41之間的所有改變都集成到本地工作副本ECoupon_tmp項目中,于是從版本號39開始~41的所有變化都會被應用到本地工作副本。
Step 3: 提交集成結果
由于svn merge命令的最終應用時WCPATH,也就是說你只能把來自主干的改變同步到分支的本地副本。此時你本地的副本已經時最新的了,但版本庫上的分支還不是。所以還得執行一次commit







這時所有的改變都應用到版本庫的分支上了
需要注意的一點:merge成功不代表一切都沒有問題,還需要檢查merge的內容是不是真正符合我們要求的
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。