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 阅读(434) 评论(0)  编辑  收藏 所属分类: 项目管理

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜