●使用svn update -r 命令
















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



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














接下來我們要回滾到版本18.也就是剛剛創(chuàng)建的哪一個(gè)版本。

















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







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