Subversion 分支操作

http://www.blogjava.net/superliuwr/archive/2009/05/06/269214.html

V2 Updated by Marvin @ May 6, 2009

整理自免費的svnbook 中文版


創建分支

創建分支最快捷簡便的方法就是直接對url操作,然後從新的url co出工作拷貝。在Subversion server上,用硬鏈接的方式處理不同version之間相同的文件。

svn copy http://svn.example.com/svnroot/comet/trunkhttp://svn.example.com/svnroot/comet/branches/2.8 –m “creating a private branch of comet”

合併一個分支上的修改到主幹

Subversion的分支合並不是一個高風險的事情。其實Subversion並沒有真正意義的分支概念,只有copy,但每個copy都會保留其所有的歷史信息。像Clearcase那樣的單獨一個維度的version tag是不存在的,Subversion中的tag只是用來做快照而已,而且本質上也是copy,如果你提交新東西,那它就和branch是一樣的。

簡單地說,它一共只做了兩件事。第一,比較兩個版本的不同,這和你用svn diff得到的結果是一樣的,只是svn diff會把changes打印出來。第二,把changes應用到你指定的工作拷貝上去,這表現爲你的工作拷貝的本地修改,你可以在這個基礎上再做修改,或是檢查有沒有問題,然後再提交。Subversion server並不關心你的提交是來自svn merge的修改,還是你自己改的代碼。如果對結果不滿意或者後悔了,一樣可以用svn revert取消本地修改。

一個好的習慣是,提交的時候在註釋中寫清楚是從那個版本merge過來的。

Best practice 關於從某分支上merge changes到主幹:

step1:找到前一次合併到主幹時的version(341)

svn log –v –-stop-on-copy http://svn.example.com/svnroot/comet/branches/2.8

step2:切換到trunk的本地工作目錄

step3:update到最新,獲得當前HEAD的version(405)

svn update

我們只用比較分支的初始狀態和最終狀態,然後把這些changes merge到主幹上去,而不是分支的初始狀態和主幹的最終狀態。

step4:merge

svn merge –r 341:405 http://svn.example.com/svnroot/comet/branches/2.8

此處省略了目標工作拷貝,默認是當前目錄的工作拷貝,也可以指定

svn merge –r 341:405 http://svn.example.com/svnroot/comet/branches/2.8 my_trunk_copy

step5:查看merge後的狀態

svn status

step6:編譯測試看有無問題

step7:提交

svn commit –m “Merged 2.8 changes r341:405 into the trunk.”




切換到另一個分支

如果你不是同時在幾個分支上工作,那麼沒有必要在你的機器上保留多個不同分支的工作拷貝。你可以用svn switch在不同的分支間切換。

例如你現在的工作拷貝是基於2.8 branch的,你想切換到trunk上去,只要運行

svn switch http://svn.example.com/svnroot/comet/trunk

svn switch 還可以接受-r 參數來制定要切換的版本號,也支持只對部分目錄執行版本切換。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章