1

今天下午,在注意到构建损坏以及一些文件看起来非常旧的版本(大约 2 周前)的事实后,我检查了 svn 日志。显然就在今天下午,其中一位开发人员将一个目录从旧版本复制到同一目录。因此,该目录中所有文件的最新版本“ie head”似乎确实很旧,并且所有历史记录“ie log”甚至更旧。

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

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

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

4

3 回答 3

7

根据SVN 书

svn merge -c -1234

应该做的伎俩。

书中有一整关于这方面的内容。

详细的解释: -c -1234翻译成-r 1234:1233,这会恢复从修订版 1234 的更改。

于 2008-12-12T08:25:38.607 回答
1

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

  1. 由于目标目录已经存在,svn将复制请求视为复制到目标目录;你不能用cp覆盖。所以这将创建 up/dir/dir。当创建 dir 的 HEAD 版本时,也必须首先进行删除操作。
  2. 请求将 HEAD 对象的版本 1233 复制到 up/dir。但是,HEAD 中的 dir 对象没有修订版 1233;具有相同路径且具有此类修订的对象已被删除。

要解决此问题,您需要

  1. 删除当前目录对象:

    svn rm file:///path/to/messed/up/dir
    
  2. 使用“挂钩修订”复制

    svn cp file:///path/to/messed/up/dir@1233 file:///path/to/messed/up
    
于 2008-12-12T05:24:24.277 回答
-2

可能,但先备份。

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

于 2008-12-12T04:53:00.423 回答