SVN版本分支合並


  SVN,開發中常用的工具,也沒什么可說的。這里只是記錄一下,以免太久不用了想用的時候又忘了。

  首先已經有兩個目錄,一個是分支目錄SVNChild,一個是主干目錄SVNMain。SVNChild是從SVNMain分出來的一個版本,即整個代碼結構(文件夾、代碼文件)基本一樣的,當然新添加了部分文件、修改文件是正常的。如果不是,則合並的選項都不是一樣的。SVN的分支合並有三種,這里只說分支合並到主干,主干合並到分支兩種,第三種沒用過,不太清楚。分支合並到主干、主干合並到分支操作基本一樣,這里就以主干合並到分支說明。

  假如SVNMain主干的版本到了999,這時用版本900建立分支目錄SVNChild,提交分支目錄,則總的SVN版本到了1000。那我們就要注意3個版本了,一個是主干版本999,一個是分支版本900,總SVN版本1000。注意在提交分支目錄時需要在log記錄其版本為900,不然以后忘了,我真不知道分支是什么版本(PS:有知道的望指教)。 

  在SVNChild上右鍵--TortoiseSVN--Merge進行合並。

選擇合並主干到分支,下一步

選擇正確的SVN主干路徑,然后就是填寫需要合並的版本。比如需要合並版本900到最新版本(分支版本就是900),則填寫900-HEAD,如果中間有一些版本不需要合並,如果906,908這兩個版本不需要合並,則填寫為900-905,907,909-HEAD。然后就是下一步了,會有一個test merge,會進行合並模擬,可以看到哪些文件被更新......確定是所需要合並的文件后,確定就OK了。合並完成后,只是把主干上的文件合並到本地,需要提交SVNChild目錄。

  最后,需要說明的是SVN版本不同可能會略有不同。還有就是SVN目錄下的操作能提交的應盡快提交,一方面是防止代碼丟失,另一方面是防止出現一些莫名其妙的錯誤。有些同事的SVN會更新不上(檢查過沒有沖突,沒有忽略),也有過同事合並不了,沒有錯誤,但在test merge這一步沒顯示任何文件被更新。后來也查不出來,把SVN目錄刪除重新checkout未發現什么問題。

------------------------------------------------------------------------------2014-05-25-----------------------------------------------------------------------------------

  上一次項目發布新版本時,把主干上的版本跨版本融合到發布分支上了。即主干開發已給到1999了,發布分支停留在主干的1987版本上,那么這次要更新到1992版本。但是在主干上1996版本時修復了一些BUG,而1993-1995這些版本是不能發布的。所以我就把1987-1992,1996融合到發布分支上去了,其中跳過了一些版本。這沒有發現問題。

  結果最近一次發布新版本時,需要發布版本2008。由於上一次融合了版本1996,那么這些就是1992-1995,1997-2008這樣了,感覺不會有問題,結果提示有沖突了。想一下,估計是1992-1995,1997-2008這些版本中修改了1996版本中的文件。因為當時發布時間很急,沒來得及多想,先1992-1995融合,提交分支,然后再1997-2008這樣分段融合,居然只是merge而不是conflict。用beyond comapre對比一下文件,沒有發現問題,就發布了。

  現在回想一下,做了一些驗證。

  首先,想一下為什么會conflict。條件是文件內容不一樣(假設不能merge)並且本地的文件版本比要merge版本高或者是本地文件經過修改。文件不一樣是肯定的,而且由於merge后再update會產生一個主干版本號,故就沖突了。因為我們是把主干合並到發布分支,其實我們期望的是做update,即在發布分支出現conflict時,以主干為准,直接update。但事實是,svn允許在分支上修改文件,故這要求對svn不適用,並不是所有用svn的人都不會在分支個修改文件。平時我們看到的update是因為同事修改了文件,update后版本更高。雖然我們本地的文件內容沖突,但版本高為准嘛。而不跨版本融合時(即使分多次融合,分支版本號比要merge版本高),要融合的文件版本號應該取的是主干上一次融合的版本號。

  思路有點亂,也不一定正確。總結一下。當需要跨版本融合時,要保證中間的版本(如例子中的1996)的文件在之前版本不被修改。下面做驗證時:

在上面的圖中,log標明為step的修改的都是同一文件,other的則是每次都修改不同文件。發現在step中跨版本融合時,總會提示沖突

而修改不同文件的版本,則不會有問題。

另外,在新版本的SVN中,融合時show log會記錄哪些版本已融合,已融合的為灰色並有融合圖標


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM