2009年3月23日星期一

svn恢复误删除的数据(转)

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,大数据量时,速度会很慢。

没有评论: