posts - 262,  comments - 221,  trackbacks - 0
          前面認(rèn)識(shí)了svn log命令的用法,知道了該文件的最新版本號(hào)是19。那么現(xiàn)在我們就來試試回滾到版本號(hào)18。下面將通過三種不同的方式來演示如何回滾到指定的歷史版本

          ●使用svn update -r 命令

          C:\>svn cat E:\Temp\ECoupon\read-from-wc.txt
          modify by user qlinpen

          C:
          \>svn cat -r HEAD http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt
          modify by user qlinpen

          C:
          \>svn cat -18 http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt

          C:
          \>svn update -18 E:\Temp\ECoupon\read-from-wc.txt
          U    E:
          \Temp\ECoupon\read-from-wc.txt
          Updated 
          to revision 18.

          C:
          \>svn cat E:\Temp\ECoupon\read-from-wc.txt

          C:
          \>svn cat -r HEAD http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt
          modify by user qlinpen

          上面的例子中,在執(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命令,就可以看到差別了:

          C:\>svn status E:\Temp\ECoupon --show-updates
                 
          *       18   E:\Temp\ECoupon\read-from-wc.txt
          Status against revision:     
          19

          結(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文件的版本歷史:

          C:\>svn log --18:HEAD E:\Temp\ECoupon\read-from-wc.txt
          ------------------------------------------------------------------------
          r18 
          | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009| 1 line
          Changed paths:
             A 
          /Ericsson/ECoupon/read-from-wc.txt

          commit after update
          ------------------------------------------------------------------------
          r19 
          | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009| 1 line
          Changed paths:
             M 
          /Ericsson/ECoupon/read-from-wc.txt

          update read
          -from-local.txt file
          ------------------------------------------------------------------------

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

          C:\>svn copy E:\Temp\ECoupon\read-from-wc.txt@18 E:\Temp\ECoupon
          svn: Path 
          'E:\Temp\ECoupon\read-from-wc.txt' already exists

          C:\
          >svn del E:\Temp\ECoupon\read-from-wc.txt
          D         E:\Temp\ECoupon\read
          -from-wc.txt

          C:\
          >svn copy E:\Temp\ECoupon\read-from-wc.txt@18 E:\Temp\ECoupon
          A         E:\Temp\ECoupon\read
          -from-wc.txt

          C:\
          >svn status E:\Temp\ECoupon --show-updates
          R  
          +            -   E:\Temp\ECoupon\read-from-wc.txt
          Status against revision:     
          19

          C:\
          >svn cat -r BASE E:\Temp\ECoupon\read-from-wc.txt

          C:\
          >svn cat -r HEAD http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt
          modify by user qlinpen

          通過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)。配合重定向功能我們可以在查看歷史版本后重定向到本地。

          C:\>svn cat -18 E:\Temp\ECoupon\read-from-wc.txt

          C:\
          >svn cat -18 E:\Temp\ECoupon\read-from-wc.txt > E:\Temp\ECoupon\read-from-wc.txt

          C:\
          >svn status E:\Temp\ECoupon --show-updates
          M              
          19   E:\Temp\ECoupon\read-from-wc.txt
          Status against revision:     
          19

          和svn update,svn copy命令相比,svn cat 配合重定向顯得“高效”和“霸道”多了---因?yàn)樗粫?huì)給出任何提示或警告就直接覆蓋了


          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2009-12-09 17:19 Paul Lin 閱讀(430) 評(píng)論(0)  編輯  收藏 所屬分類: 項(xiàng)目管理
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 龙陵县| 宜兴市| 南充市| 太仆寺旗| 乌兰县| 莱阳市| 安远县| 陇川县| 阿拉尔市| 渝中区| 双峰县| 寻甸| 扬中市| 奇台县| 遵义市| 昭苏县| 绥芬河市| 寻乌县| 古蔺县| 合山市| 名山县| 简阳市| 化隆| 南郑县| 汽车| 日喀则市| 锦屏县| 桂东县| 安龙县| 汶上县| 兴城市| 湖北省| 葫芦岛市| 田林县| 武威市| 绍兴县| 浪卡子县| 南平市| 突泉县| 绵阳市| 肥乡县|