posts - 262,  comments - 221,  trackbacks - 0
          前面認(rèn)識了svn log命令的用法,知道了該文件的最新版本號是19。那么現(xiàn)在我們就來試試回滾到版本號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時的狀態(tài):即空文本。但是版本庫上面的read-from-wc.txt文件依然是版本號19的,也即是最新狀態(tài)。如果此時執(zhí)行svn status命令,就可以看到差別了:

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

          結(jié)論:對于沒有本地修改的資源,svn update可以回滾到指定的歷史版本。但是如果資源已經(jīng)被修改,則svn update不會對其進行update。

          ●使用svn copy命令

          實際上,除了使用svn update。另外一種更好的辦法是使用svn copy命令。那么svn copy命令的用法如何呢?根據(jù)SVN手冊,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支持針對特定版本的拷貝。下面我們通過實際的例子來演示如何通過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)建的哪一個版本。

          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相比,這里多了一個“刪除”的動作,所以在svn status命令的執(zhí)行結(jié)果中會出現(xiàn)一個“R +”,R是Replace的縮寫:表明這個文件已經(jīng)被同名的文件所取代。從以上的實例可以看到svn copy不單可以拷貝當(dāng)前的文件,還可以拷貝歷史版本。

          ●使用svn cat命令配合重定向

          最后介紹另外一種辦法:svn cat重定向。和svn log類似,svn cat也可以查看歷史版本的內(nèi)容,但它不能指定版本范圍而只能使用單個版本號。配合重定向功能我們可以在查看歷史版本后重定向到本地。

          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 閱讀(432) 評論(0)  編輯  收藏 所屬分類: 項目管理
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沙坪坝区| 洪洞县| 红河县| 北京市| 邯郸县| 房山区| 尚义县| 灵宝市| 乌鲁木齐县| 金堂县| 宁城县| 舟山市| 湘乡市| 林州市| 娄底市| 平武县| 商南县| 峨眉山市| 罗定市| 理塘县| 娄底市| 南澳县| 阿尔山市| 宣化县| 吴川市| 五常市| 红桥区| 贺州市| 台州市| 岚皋县| 济宁市| 扎囊县| 射阳县| 临洮县| 阳原县| 闵行区| 兰溪市| 湘乡市| 安仁县| 黑水县| 五指山市|