pengpenglin
人,必须选择一种生活方式并有勇气坚持下去
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
【原】SVN In Action(10)
【13】撤销本地的修改
在每次提交版本之前,我们都需要先update一下本地的版本,检查本地文件是否已经版本过低(out-of-date)。这时我们通常会发现:
A.有些本地修改和版本库的修改发生了冲突,且必须以版本库的为准
B.有些本地修改是不必要的
面对这些问题,我们的第一想法就是把被修改的文件恢复到修改前的样子。但是如果被修改的文件修改点很分散,或者数量众多,甚至我们忘记了备份原有的文件....那么应该怎么办?有没有一种方法可以帮我们一次性地将对某个文件所做的全部修改都复原?有!这就是svn revert命令。
svn revert命令用于回滚本地尚未提交的任何操作(例如add, delete操作),文件或目录的内容,甚至属性的修改。
实际上svn revert命令是一把“双刃剑”。它有几个需要特别小心的地方:
A.回滚是不可恢复的。由于svn revert回滚的是任何未提交的操作,内容,属性。所以意味着SVN不会为你保存任何回滚前的历史版本
B.回滚是不止于一点而是一段时间的。只要你没有提交版本,那么不论你多久之前所做的修改都会被回滚,而不仅仅是最近一次的修改
C.鉴于svn revert命令如此危险的特性,所以svn revert命令强制使用者必须给出一个明确的路径参数,不允许svn revert这样的命令执行。
下面我们逐个来看revert是如何进行的:
●回滚文件的内容
假设现在我们的ECoupon项目下有文件如下
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。现在我们来看本地的差异比较
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命令显示本地的文件已经被改变(M),而且svn diff命令展示了这次改变的内容就是增加了(+)了“Will revert by "svn revert" command。”这句话(关于svn diff命令的使用会在后面讲解)。现在我们来回滚这个文件的内容
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确实把本地修改的内容回滚了。那么它是如何知道应该回滚到那个版本的呢?答案就是靠本地工作副本每个目录下的那个.svn目录。在这个目录下存储了我们每次的本地修改,执行svn revert后SVN会从这里取得上一个版本的信息,然后回滚。
那么svn revert命令能够一次性回滚多个文件内容的修改吗?
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:\
>
事实证明一次回滚多个文件也是可以的。那么对于整个目录呢?像上面的要求我们还有更简便的做法,请看下面
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参数
这就是svn revet命令的简便之处,如果确定要回滚的内容都在同一个目录下,我们就可以一次性地回滚。
参数--depth是svn命令的一个全局参数,用于限制命令执行的范围。可选项包括:empty,file,immediate,infinity。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2009-12-09 09:47
Paul Lin
阅读(733)
评论(0)
编辑
收藏
所属分类:
项目管理
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
【转】有没有可能进行同级管理
敏捷文章三则
【原】敏捷开发沉思(真实对话)
【转】新任项目经理必须掌握的五项修炼
【转】管理者的困境:放权或者崩溃
【转】网络阅读,为什么人会浮躁?
【原】SVN In Action系列发布
【原】SVN In Action(23)
【原】SVN In Action(22)
【原】SVN In Action(21)
<
2009年12月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(21)
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE 框架(9)
J2EE基础(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 开发(13)
Oracle 管理(4)
Oracle 调优
Oracle 错误诊断
RoR(19)
UML(3)
Unix / Linux(13)
Web基础(19)
其它技术(7)
感悟(3)
杂项(7)
架构与性能(8)
模式与重构(19)
灌水(8)
电影与音乐(16)
走过的路(1)
软件过程与软件方法(3)
阳光户外(2)
项目管理(36)
随笔档案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava热点博客
BeanSoft
Jack.Wang
如坐春风
诗特林
郑晖
银河使者
阿密果
隔叶黄莺
好友博客
无羽苍鹰
搜索
最新评论
1. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
666666666666666666666这几天正在做个类似工程编码出现错误
--李
2. re: 【Java基础专题】IO与文件读写---使用Apache commons IO简化文件读写
不错
--阿斯兰
3. re: 【Java基础专题】编码与乱码(03)----String的toCharArray()方法
多谢分享
--thx
4. re: 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
评论内容较长,点击标题查看
--karl
5. re: 【Java基础专题】编码与乱码(01)---编码基础[未登录]
谢谢,帮了我大忙!
--小龙
阅读排行榜
1. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)(48351)
2. getOutputStream() has already been called for this response的解决方法(43322)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(36953)
4. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(21210)
5. Java中读取字节流并按指定编码转换成字符串的方法(17300)
评论排行榜
1. 360安全卫士误删audiosrv.dll文件造成系统无声的解决方案(33)
2. 【原】Oracle开发专题之:时间运算(11)
3. 【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换(11)
4. getOutputStream() has already been called for this response的解决方法(10)
5. 【原】Oracle开发专题之:分析函数(OVER)(8)