从一个不幸的“svn副本”中恢复

时间:2008-12-12 03:51:05

标签: svn recovery

今天下午,在注意到构建破坏以及某些文件看起来像旧版本(大约2周龄)这一事实后,我检查了svn日志。显然,就在今天下午,其中一位开发人员对旧目录中的目录进行了“svn副本”。因此,该目录中所有文件的最新版本“即头”似乎真的很旧,所有历史记录“即日志”甚至更旧。

然而,我认为我可以通过使用另一个“svn副本”恢复(即疾病是治愈)。我正在考虑做的是找到坏的“svn副本”完成的修订(比如转1234),减去1(1233)并做:

svn copy -r 1233 file://path/to/messed/up/dir file://path/to/messed/up/dir

应该恢复最新版本,以及恢复我的所有历史记录。我是对的吗?

3 个答案:

答案 0 :(得分:7)

根据the SVN book

svn merge -c -1234

应该这样做。

书中有关于此的全部section

详细说明: -c -1234转换为-r 1234:1233,从版本1234恢复更改。

答案 1 :(得分:1)

此复制命令不起作用有两个原因:

  1. 由于目标目录已存在,svn将复制请求视为复制到目标目录;你不能用cp覆盖。所以这会创建/ dir / dir。当创建HEAD版本的dir时,首先必须有一个删除操作。
  2. 请求将HEAD对象的版本1233复制到/ dir.However,HEAD中的dir对象没有修订版1233;删除了具有相同路径的相同路径的对象。
  3. 要解决此问题,您需要

    1. 删除当前的dir对象:

      svn rm file:///path/to/messed/up/dir
      
    2. 使用“peg revisions”复制

      svn cp file:///path/to/messed/up/dir@1233 file:///path/to/messed/up
      

答案 2 :(得分:-2)

可能,但先做好备份。

实际上,我想知道为什么你没有可以从已经恢复的每日备份...你的SVN存储库肯定是足够重要的吗?