posts - 262,  comments - 221,  trackbacks - 0
          前面認識了svn log命令的用法,知道了該文件的最新版本號是19。那么現在我們就來試試回滾到版本號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

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

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

          結論:對于沒有本地修改的資源,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文件的版本歷史:

          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.也就是剛剛創建的哪一個版本。

          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刪除本地已經存在的同名文件,否則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也可以查看歷史版本的內容,但它不能指定版本范圍而只能使用單個版本號。配合重定向功能我們可以在查看歷史版本后重定向到本地。

          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 配合重定向顯得“高效”和“霸道”多了---因為它不會給出任何提示或警告就直接覆蓋了


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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 奉节县| 曲靖市| 墨竹工卡县| 东源县| 菏泽市| 南漳县| 富锦市| 民乐县| 通化县| 洛宁县| 安宁市| 美姑县| 宜宾县| 胶南市| 新兴县| 许昌市| 定南县| 左云县| 通榆县| 德江县| 京山县| 青冈县| 泊头市| 保山市| 郑州市| 屏东市| 都江堰市| 九龙坡区| 孝昌县| 庆城县| 夏津县| 邮箱| 沅陵县| 正宁县| 乐清市| 清水县| 花莲县| 大兴区| 焉耆| 盐城市| 沾益县|