SVN 小筆記

SVN (Subversion) 是一個免費的版本管理系統, 雖然很浪費空間, 但是功能強大. 它的基本功能 check out、update、commit 大家應該都會吧! 我來講一下比較會讓人暈頭的 merge 和 switch.

Switch 相對簡單, 只要下 switch, PC 硬碟上的目錄就可以從 server 的 A 目錄改成對應 B 目錄. 這有甚麼用呢? 當我們改 code 改了半天,  可能既要 commit A 目錄, 又可以 commit 到 B 目錄. 如果一開始的 code 是從 server 的 A 目錄 check out 出來的, 那麼 commit 回 A 目錄當然不成問題. 可以要 commit B 目錄的話, 就沒那麼直覺了.

因為這個 PC 上的 A 目錄與子目錄裡面有很多 .svn 的隱藏檔 (每個目錄一個), 所以它硬是要效忠於 server 上的 A 目錄 (儘管名稱可以不同). 若是把 .svn 都砍掉, 倒是可以把它 copy 起來, 再蓋到 PC 上的目錄 B, 接著再 commit. 不過這樣做就太痤了. Switch 可以直接讓 .svn 的效忠對象改變, 這樣就省了很多了麻煩.

再說到 merge. 一般手工 merge code 當然是看看有甚麼 diff (difference). 但是 SVN 有現成的 merge 指令讓我們 merge A version 到 B version. 在此處有幾個東西要注意: (1) Merge from older version to newer version. 如果把順序弄反的話, 就會變得亂七八糟. (2) 可以在 PC 上的 A 目錄 merge 或是 B 目錄 merge. 選擇 PC 上的目錄決定了merge 的結果對應到 server 上的哪一個目錄, 它與 start URL 與 end URL 為何沒有關係.

此處的 merge 結果可能還需要手工修正, 但假如目錄 B 是從 frozen 的目錄 A branch 出來的, 那麼 A-B merge 的結果就等於目錄 B 蓋掉目錄 A. 此時拿 merge 的結果再 commit 成新版就好了, 也是相當方便!

發表留言