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 參數來制定要切換的版本號,也支持只對部分目錄執行版本切換。