●使用svn update -r 命令
















上面的例子中,在執行回滾前,本地工作副本和版本庫的read-from-wc.txt文件的內容都是一樣的:modify by user qlinpen。當我們執行了svn update -r 18 ...命令后可以看到本地的read-from-wc.txt文件的內容已經被回滾到版本18時的狀態:即空文本。但是版本庫上面的read-from-wc.txt文件依然是版本號19的,也即是最新狀態。如果此時執行svn status命令,就可以看到差別了:



結論:對于沒有本地修改的資源,svn update可以回滾到指定的歷史版本。但是如果資源已經被修改,則svn update不會對其進行update。
●使用svn copy命令
實際上,除了使用svn update。另外一種更好的辦法是使用svn copy命令。那么svn copy命令的用法如何呢?根據SVN手冊,svn copy的用法有4種:
A.WC->WC:即從工作副本到工作副本
B.WC->URL:即從工作副本到版本庫,立即產生一次commit操作
C.URL->WC:即從版本庫到工作副本,相當于check out操作
D.URL->URL:即從版本庫到版本庫,通常用于創建分支和標記
而且更加有用的是,svn copy支持針對特定版本的拷貝。下面我們通過實際的例子來演示如何通過svn copy來回滾資源到歷史版本。首先檢查read-from-wc.txt文件的版本歷史:














接下來我們要回滾到版本18.也就是剛剛創建的哪一個版本。

















通過svn copy的做法是
A.首先用svn del刪除本地已經存在的同名文件,否則copy操作失敗
B.然后用svn copy PATH/URL@REV PATH/URL來拷貝指定版本的資源到目的地
和svn update -r REV相比,這里多了一個“刪除”的動作,所以在svn status命令的執行結果中會出現一個“R +”,R是Replace的縮寫:表明這個文件已經被同名的文件所取代。從以上的實例可以看到svn copy不單可以拷貝當前的文件,還可以拷貝歷史版本。
●使用svn cat命令配合重定向
最后介紹另外一種辦法:svn cat重定向。和svn log類似,svn cat也可以查看歷史版本的內容,但它不能指定版本范圍而只能使用單個版本號。配合重定向功能我們可以在查看歷史版本后重定向到本地。







和svn update,svn copy命令相比,svn cat 配合重定向顯得“高效”和“霸道”多了---因為它不會給出任何提示或警告就直接覆蓋了
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。