1、如果只是在本地删除,没有提交的话,只需要运行:
svn revert 文件名
命令即可。
如果是希望恢复整个目录的文件,可以用 --recursive选项:
svn revert --recursive
2、如果是已经提交到服务器,那么运行:
svn merge命令
如,不小心将整个目录都删除了,你应首先将该目录的其他所有人的权限改为“只读”,以防止期间有其他人提交,然后通过查看历史记录查出没删除之前的版本号,接着运行如下命令进行恢复:
假设没删除之前的版本号为1151,删除后版本号变为1152,现在整个库的最新版本已经发展到1155了,运行:
svn merge http://www.scmbbs.com/repos/project1/trunk/@head http://www.scmbbs.com/repos/project1/trunk/@1151
注意:是“to最新版本,from老版本”的格式进行merge,因此head在前面,1151在后面。
合并完之后,再运行:
svn ci -m"revert the delete action"
进行提交到服务器。
在到库中查看一下,发现此时被删掉的东西又回来了。
如果数据较多,可以用更快的方法:使用svn cp命令。
如上面例子中,如果整个trunk已被删除,通过svn log命令查明删除前版本号1151,删除后版本号1152,现在版本号1155,则运行命令:
svn cp -r 1151 http://www.scmbbs.com/repos/project1/trunk/ http://www.scmbbs.com/repos/project1/ -m"recover from wrong deleted"
可以快速将trunk的1151版本恢复。注意:此语法与上面svn merge不同,是“from 历史,to 最新位置”形式。
一般情况下,用svn cp命令速度更快,直接操作svn库url,不需要svn commit。
但有时候如果trunk被误删除后,又被添加了新的内容如:trunk/newproject 目录,则不能用svn cp命令恢复了。如果trunk/数据较少时,可以用svn merge(见1楼)。如果trunk/数据非常大量,则可以先svn checkout出trunk/newproject到本地备份,再svn delete删除掉trunk/,然后用svn cp恢复1151版本的trunk,再重新添加备份到本地newproject目录,这种方法往往比svn merge更快。
因为svn merge需要checkout、再commit,大数据量时,速度会很慢。
没有评论:
发表评论