posts - 262,  comments - 221,  trackbacks - 0
          【13】撤銷本地的修改
          在每次提交版本之前,我們都需要先update一下本地的版本,檢查本地文件是否已經(jīng)版本過低(out-of-date)。這時我們通常會發(fā)現(xiàn):

           A.有些本地修改和版本庫的修改發(fā)生了沖突,且必須以版本庫的為準(zhǔn)
           B.有些本地修改是不必要的

          面對這些問題,我們的第一想法就是把被修改的文件恢復(fù)到修改前的樣子。但是如果被修改的文件修改點(diǎn)很分散,或者數(shù)量眾多,甚至我們忘記了備份原有的文件....那么應(yīng)該怎么辦?有沒有一種方法可以幫我們一次性地將對某個文件所做的全部修改都復(fù)原?有!這就是svn revert命令。

          svn revert命令用于回滾本地尚未提交的任何操作(例如add, delete操作),文件或目錄的內(nèi)容,甚至屬性的修改。

          實(shí)際上svn revert命令是一把“雙刃劍”。它有幾個需要特別小心的地方:

           A.回滾是不可恢復(fù)的。由于svn revert回滾的是任何未提交的操作,內(nèi)容,屬性。所以意味著SVN不會為你保存任何回滾前的歷史版本

           B.回滾是不止于一點(diǎn)而是一段時間的。只要你沒有提交版本,那么不論你多久之前所做的修改都會被回滾,而不僅僅是最近一次的修改

           C.鑒于svn revert命令如此危險的特性,所以svn revert命令強(qiáng)制使用者必須給出一個明確的路徑參數(shù),不允許svn revert這樣的命令執(zhí)行。

          下面我們逐個來看revert是如何進(jìn)行的:

          ●回滾文件的內(nèi)容
            
          假設(shè)現(xiàn)在我們的ECoupon項(xiàng)目下有文件如下
          C:\>svn list E:\Temp\ECoupon
          WebRoot
          /
          doc
          /
          src
          /
          read
          -from-repo.txt
          read
          -from-wc.txt

          我們修改read-from-wc.txt文件,在其末尾增加一句話:Will revert by "svn revert" command。現(xiàn)在我們來看本地的差異比較

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

          C:\
          >svn diff E:\Temp\ECoupon\read-from-wc.txt
          Index: E:
          /Temp/ECoupon/read-from-wc.txt
          =======================================================
          --- E:/Temp/ECoupon/read-from-wc.txt    (revision 18)
          +++ E:/Temp/ECoupon/read-from-wc.txt    (working copy)
          @@ 
          -0,0 +1 @@
          +Will revert by "svn revert" command。
          \ No newline at end of file

          我們看到svn status命令顯示本地的文件已經(jīng)被改變(M),而且svn diff命令展示了這次改變的內(nèi)容就是增加了(+)了“Will revert by "svn revert" command。”這句話(關(guān)于svn diff命令的使用會在后面講解)。現(xiàn)在我們來回滾這個文件的內(nèi)容

          C:\>svn revert E:\Temp\ECoupon\read-from-wc.txt
          Reverted 
          'E:\Temp\ECoupon\read-from-wc.txt'

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

          可以看到svn revert確實(shí)把本地修改的內(nèi)容回滾了。那么它是如何知道應(yīng)該回滾到那個版本的呢?答案就是靠本地工作副本每個目錄下的那個.svn目錄。在這個目錄下存儲了我們每次的本地修改,執(zhí)行svn revert后SVN會從這里取得上一個版本的信息,然后回滾。

          那么svn revert命令能夠一次性回滾多個文件內(nèi)容的修改嗎?
          C:\>svn status E:\Temp\ECoupon
          M      E:\Temp\ECoupon\read
          -from-wc.txt
          M      E:\Temp\ECoupon\read
          -from-repo.txt

          C:\
          >svn revert E:\Temp\ECoupon\read-from-wc.txt E:\Temp\ECoupon\read-from-repo.txt
          Reverted 
          'E:\Temp\ECoupon\read-from-wc.txt'
          Reverted 
          'E:\Temp\ECoupon\read-from-repo.txt'

          C:\
          >svn status E:\Temp\ECoupon

          C:\
          >

          事實(shí)證明一次回滾多個文件也是可以的。那么對于整個目錄呢?像上面的要求我們還有更簡便的做法,請看下面
          C:\>svn status E:\Temp\ECoupon
          M      E:\Temp\ECoupon\read
          -from-wc.txt
          M      E:\Temp\ECoupon\read
          -from-repo.txt

          C:\
          >svn revert E:\Temp\ECoupon --depth=infinity
          Reverted 
          'E:\Temp\ECoupon\read-from-wc.txt'
          Reverted 
          'E:\Temp\ECoupon\read-from-repo.txt'

          C:\
          >svn status E:\Temp\ECoupon

          C:\
          >

          這次的操作有兩個不同的地方:
           A.我們不是指定到具體的兩個文件,而是指定到文件所在的目錄
           B.我們增加了一個--depth=infinity參數(shù)

          這就是svn revet命令的簡便之處,如果確定要回滾的內(nèi)容都在同一個目錄下,我們就可以一次性地回滾。

          參數(shù)--depth是svn命令的一個全局參數(shù),用于限制命令執(zhí)行的范圍。可選項(xiàng)包括:empty,file,immediate,infinity。
           

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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜阳县| 南江县| 南投县| 顺义区| 宝山区| 武威市| 宁德市| 天门市| 临泽县| 阜南县| 定安县| 伽师县| 基隆市| 革吉县| 内江市| 耒阳市| 颍上县| 深泽县| 松潘县| 平舆县| 兴和县| 景泰县| 萨迦县| 通州市| 图木舒克市| 铁岭市| 容城县| 方城县| 泽州县| 长乐市| 万宁市| 长阳| 涞源县| 慈溪市| 玉山县| 赫章县| 布拖县| 谢通门县| 高雄市| 庆元县| 朝阳县|