svn switch命令改變存在的工作副本到另一個分支,然而這個命令在分支上工作時不是嚴格必要的,它只是提供了一個快捷方式。在前面的例子裡,完成了私有分支的建立,你取出了新目錄的工作副本,相反,你可以簡單的告訴Subversion改變你的/calc/trunk的工作副本到分支的路徑:
$ cd calc $ svn info | grep URL URL: http://svn.example.com/repos/calc/trunk $ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch U integer.c U button.c U Makefile Updated to revision 341. $ svn info | grep URL URL: http://svn.example.com/repos/calc/branches/my-calc-branch
完成了到分支的「跳轉」,你的目錄與直接取出一個乾淨的版本沒有什麼不同。這樣會更有效率,因為分支只有很小的區別,伺服器只是發送修改的部分來使你的工作副本反映分支。
svn switch命令也可以帶--revision(-r)參數,所以你不需要一直移動你的工作副本到分支的HEAD。
當然,許多項目比我們的calc要複雜的多,有更多的子目錄,Subversion用戶通常用如下的法則使用分支:
拷貝整個項目的「trunk」目錄到一個新的分支目錄。
只是轉換工作副本的部分目錄到分支。
換句話說,如果一個用戶知道分支工作只發生在部分子目錄,我們使用svn switch來跳轉部分目錄(有時候只是單個文件),這樣的話,他們依然可以繼續得到普通的「trunk」主幹的更新,但是已經跳轉的部分則被免去了更新(除非分支上有更新)。這個特性給「混合工作副本」概念新增了新的維度—不僅工作副本的版本可以混合,在版本庫中的位置也可以混合。
如果你的工作副本包含許多來自不同版本庫目錄跳轉的子樹,它會工作如常。當你更新時,你會得到每一個目錄適當的補綴(Patch),當你提交時,你的本地修改會一直作為一個單獨的原子修改提交到版本庫。
注意,因為你的工作副本可以在混合位置的情況下工作正常,但是所有的位置必須在同一個版本庫,Subversion的版本庫不能互相通信,這個特性還不在Subversion未來的計劃裡。
因為svn switch是svn update的一個變種,具有相同的行為,當新的資料到達時,任何工作副本的已經完成的本地修改會被保存,這裡允許你作各種聰明的把戲。
舉個例子,你的工作副本目錄是/calc/trunk,你已經做了很多修改,然後你突然發現應該在分支上修改更好,沒問題!你可以使用svn switch,而你本地修改還會保留,你可以測試並提交它們到分支。