删除错误提交后的 VisualSVN 损坏表示

Posted

技术标签:

【中文标题】删除错误提交后的 VisualSVN 损坏表示【英文标题】:VisualSVN Corrupt representation after deleting bad commit 【发布时间】:2014-06-22 15:20:26 【问题描述】:

关注https://groups.google.com/forum/#!topic/visualsvn/2LpBN8qtEfM后


以下过程描述了如何“撤消”对 svn 的最后一次提交 极端情况下的存储库(fsfs后端):(请测试它 在实际之前彻底在您的环境中进行“测试”回购 应用它) 假设错误的修订号是$BAD_REV

    停止可视 svn 服务器。 备份所有存储库(以防万一不幸发生) 转到“存储库”文件夹。 选择您需要在其中“撤消”最后一次提交的特定存储库。 编辑 db/current 并减少第一个数字。那是 HEAD rev。 删除db/rev/$BAD_REV 删除db/revprops/$BAD_REV 启动可视 svn 服务器。

注意:请所有用户删除使用$BAD_REV的结帐 并使用 ($BAD_REV 减 1) 重新签出。


在此过程后的第二次提交后,我收到以下错误:

错误提交失败(详情如下):错误损坏 表示'199 10142 111 1475(空)错误d18718662872fab9aa981c20a47921768f567189(空)

不知道如何解决这个问题,我不想创建新的存储库。

【问题讨论】:

您备份了所有内容吗?您是否尝试仅删除最后一次提交,还是中间的一次提交? (后者肯定会破坏你的回购)。 【参考方案1】:

您通过手动编辑其内部结构破坏了存储库。事实上,阿里的程序是有害的。除非您真的知道自己在做什么,否则您不得触摸存储库内部。我希望你有这个 repo 的备份。

你读过the thread you refer in the question吗? Simon explicitly discourages使用阿里指定的程序。

我们不建议使用该过程来删除最新版本。 Subversion 存储库结构比看起来更复杂。

通常您可以在工作副本中还原不必要的更改,然后 提交正确的修订。如果你真的需要删除最后一个修订 从存储库中执行以下步骤:

    备份存储库。

    转储除最后一个以外的所有修订。假设最后一次修订是 10:

    svnadmin.exe dump -r1:9 <repository path> > repo.dump.

    创建新的存储库。

    加载转储到新存储库:

    svnadmin.exe load <new repository path> < repo.dump.

如果您没有备份,那么修复存储库的唯一可能解决方案是按照以下步骤操作:

    备份存储库, 使用svnadmin verify 工具检查存储库, 启动 Windows 资源管理器并导航到 <path-to-repository>\db\ 目录,

    从目录中删除 rep-cache.db 文件并尝试再次通过 Subversion 客户端访问它(例如尝试将任何更改提交到 repo)。 除非存储库完全损坏,否则它可能会有所帮助。

    尽管如此,我强烈建议恢复存储库的备份并遵循正确的过程,其中涉及使用 svnadmin dumpsvnadmin load 工具。

【讨论】:

【参考方案2】:

似乎删除存储库文件夹中的 rep-cache.db 文件可以解决问题。 “表示”让我相信它被缓存在某个地方。

希望这个修复能持续下去,我希望我能够帮助遇到类似情况的其他人。

【讨论】:

我不能保证这种解决方法在未来不会导致存储库出现任何其他问题。我强烈建议遵循正确的svnadmin dumpsvnadmin load 步骤。【参考方案3】:

我在通过 svnadmin 工具将 svn 存储库从一台服务器移动到另一台服务器时遇到了完全相同的问题。

我所做的是删除我创建的新存储库,然后再次导入它而不强制 UUID

您可以稍后通过 svnadmin setuuid [some id]

设置 UUID

【讨论】:

以上是关于删除错误提交后的 VisualSVN 损坏表示的主要内容,如果未能解决你的问题,请参考以下文章

TortoiseSVN与VisualSVN Server搭建SVN版本控制系统

VisualSVN:允许修改svn提交日志(pre-revpro-change hook)

VisualSVN设置提交时必须输入日志信息

Mercurial 中止:索引 ... 已损坏

SVN repo损坏了

TortoiseSVN与VisualSVN Server搭建SVN版本控制系统