2008/02/01

[軟體] Subversion 回復上一動

GSLin月初有提到 svn undo 的部份,不過因為 svn 版本的關係,或其它的因素,所以他的操作我沒有辦法很順利的操作。
像是 COMMITED:PREV 這些關鍵字的不存在(?)
svn merge -r COMMITED:PREV .
svn: Syntax error in revision argument 'COMMITED:PREV'


失敗了,所以回頭了解一下: svn merge 是什麼動作?

下面的指令可以查到說明:
svn help merge
像我是裝 ubuntu + 繁中的語言支援就可以看到:
svn merge: 將兩個來源之間的差異套用至工作複本路徑.
1. 第一種形式中, 來源 URL 各被指定到修訂版 N 與 M. 這兩個就是作為
比較的來源. 如果沒有指定修訂版的話, 預設為 HEAD.

2. 在第二種形式中, 對應到兩個來源的工作複本路徑的 URL 定義出用以
進行比較的來源. 這裡必須指定修訂版.

3. 第三種形式中, SOURCE 可為 URL 或工作複本項目, 後者會使用對應的
URL. 在修訂版 REV 的 URL 會以它存在於修訂版 N 與 M 的路徑來作
比較. 如果未指定 REV, 就會假設為 HEAD. '-c M' 選項等同於
'-r N:M', 其中 N = M-1. 使用 '-c -M' 則為相反: '-r M:N',
其中 N = M-1.


意即:
svn merge -c 和 -r 在某些條件下是一樣的動作。
假設現在是 rev1523
svn merge -r 1523:1521 . 就是把 1523(目前|新) 跟 1521(舊)的差異套用到現在的目錄底下。
同樣的動作也可以寫作:
svn merge -c -1521 . 把(目前)的版本跟 1521 版之間的差異套用到現在的目錄底下。

了解了這個動作的目的,就可以明白,在 svn 底下作 undo 的操作前, svn up|revert 的動作是一定要做的;至少讓目前的 rev 是在 svn repo 存在的,這樣才不會發生 Conflict 的情況。

沒有留言:

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...