posts - 262,  comments - 221,  trackbacks - 0
          【14】svn update與svn revert
          對于svn revert命令,前面我們分別通過“回滾文件內容”,“回滾屬性”,“回滾操作”來給出直觀的認識。現在我們再通過一個稍微復雜的例子來進一步了解svn revet命令。

          假設現在我們的目錄環境如下:
          C:\>svn list E:\Temp\ECoupon
          WebRoot
          /
          doc
          /
          read
          -from-repo.txt
          read
          -from-wc.txt
          src
          /

          前面我們提到對于尚未提交的本地修改,可以使用svn revet回滾。那么如果我們使用svn update來從版本庫同步到本地文件,不也是可以達到同樣的目的嗎?事實是這樣嗎?

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

          C:
          \>svn update E:\Temp\ECoupon
          At revision 
          18.

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

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

          C:
          \>type E:\Temp\ECoupon\read-from-wc.txt
          Wrong content, don
          't commit!

          C:
          \>svn diff -r HEAD 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 @@
          +Wrong content, don't commit!
          \ No newline at end of file

          可以發現,即便我們執行了svn update操作,本地已經修改的文件仍然不會被回滾到和版本庫一樣的版本。這是因為:

          因為SVN為了保護用戶不小心update操作而覆蓋自己本地的修改,不會對已經被修改但尚未提交的資源進行update操作。像這種情況下只能用svn revert而不能用svn update。

          【15】svn del與svn revert
          好了,那么假如現在我們在修改后臨提交之前發覺這個read-from-wc.txt是不需要的,我們要刪除而不是回滾它了。該怎么做?看看下面的實驗:

          C:\>svn del E:\Temp\ECoupon\read-from-wc.txt
          svn: Use 
          --force to override this restriction
          svn: 
          'E:\Temp\ECoupon\read-from-wc.txt' has local modifications

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

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

          上面的實驗我們一共做了2個變更:
           A.修改本地文件read-from-wc.txt
           B.標記刪除本地文件read-from-wc.txt

          和svn update不會對已修改而尚未提交的資源進行update一樣,svn del同樣不會刪除已修改但尚未提交的資源---除非你強制加上--force參數。

          如果此時我們又想反悔了,那么再次執行svn revert命令會有什么后果:

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

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

          C:
          \>svn diff -r HEAD E:\Temp\ECoupon\read-from-wc.txt

          C:
          \>

          好了,現在文件read-from-wc.txt又回來,但是之前我們對它進行的本地修改也跟著不見了!這是因為svn revert回滾的是所有本地未提交的操作,內容,屬性。所以在回滾刪除操作之時,也會連修改操作也一起回滾。這個教訓告訴我們:

          不要把所有變更都放在最后一次性提交,提交要及時、多次。否則一旦回滾所有其他修改都會跟著撤銷。


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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永寿县| 通海县| 黔西| 虎林市| 曲沃县| 沿河| 扬中市| 巴塘县| 体育| 自治县| 饶河县| 同德县| 亳州市| 酒泉市| 桐庐县| 西乡县| 宁强县| 兴城市| 通许县| 锦屏县| 长治市| 修文县| 道真| 景宁| 平顺县| 塔城市| 黎平县| 顺平县| 孟连| 衡山县| 宜兴市| 博客| 清涧县| 沛县| 涪陵区| 宁晋县| 太仓市| 沾化县| 纳雍县| 石棉县| 宁安市|