SVN 转储/重新加载具有历史记录的特定版本

Posted

技术标签:

【中文标题】SVN 转储/重新加载具有历史记录的特定版本【英文标题】:SVN Dump/reload specific version with history 【发布时间】:2014-12-27 15:28:25 【问题描述】:

我在文件服务器上有一个 SVN 存储库(我知道这不是最佳做法),并且其中一个最新版本已损坏。我在本地复制了我的仓库,路径是 C:\SVNLOCAL\SVNRepos。损坏的提交是 r 1070。我使用 svnadmin 将我的 repo 转储到 r 1069 (svnadmin dump C:\SVNLOCAL\SVNRepos -r 1069 > r1069.dump) 并加载 (svnadmin load C:\SVNLOCAL\RECOVER < C:\SVNLOCAL\r1069.dump) 并将其加载到新路径,但即使我取消选中重命名时停止,它也没有显示任何历史记录.

两个问题,我可以只删除 revs 文件夹中 1069 之后的任何 revs - SVNRepos\db\revs\1\1070+。我认为这不是那么简单,我确实需要进行转储和重新加载。如果是这样,我该如何在保持历史完整的同时做到这一点。

基本上,我只想恢复到 r1069,但如果我尝试针对 repo 执行此操作,它会说 1070 有意外的文件结尾并停止死机。我认为转储和加载是我唯一的选择。

【问题讨论】:

【参考方案1】:

您需要使用 两个(2) 修订参数(开始和结束修订)。 转储命令将转储开始修订中的所有路径并将下一个修订(直到结束修订)存储为增量。

正确的命令应该是:

svnadmin dump  C:\SVNLOCAL\SVNRepos  -r 0:1069 >r1069.dump

您不应该从您的 SVN 存储库中删除最后一个修订,因为您可能会损坏存储库。如果您有 svn 1.8.x 存储库,您至少会销毁 sqllite-cache。

尝试始终通过转储文件进行操作。

【讨论】:

彼得,谢谢。我想我会通过直接更改文件来炸毁我的 repo,但看到一个损坏的提交修订版搞砸了事情,我感到非常沮丧。我现在正在尝试您的修复,完成后将加载它。如果我将 repo 完整地保存到 r 1069,我会标记你的答案

以上是关于SVN 转储/重新加载具有历史记录的特定版本的主要内容,如果未能解决你的问题,请参考以下文章

svn - 获取在存储库根目录中创建的文件夹的历史记录

将具有重命名中继历史的SVN仓库导入Git

SVN Mirror 标记的分支历史保存

IntelliJ显示历史记录停止工作

从历史记录中删除文件(磁盘空间不足)

备份具有完整历史记录的SVN存储库