删除错误提交后的 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 dump
和 svnadmin load
工具。
【讨论】:
【参考方案2】:似乎删除存储库文件夹中的 rep-cache.db 文件可以解决问题。 “表示”让我相信它被缓存在某个地方。
希望这个修复能持续下去,我希望我能够帮助遇到类似情况的其他人。
【讨论】:
我不能保证这种解决方法在未来不会导致存储库出现任何其他问题。我强烈建议遵循正确的svnadmin dump
和svnadmin load
步骤。【参考方案3】:
我在通过 svnadmin 工具将 svn 存储库从一台服务器移动到另一台服务器时遇到了完全相同的问题。
我所做的是删除我创建的新存储库,然后再次导入它而不强制 UUID。
您可以稍后通过 svnadmin setuuid [some id]
设置 UUID【讨论】:
以上是关于删除错误提交后的 VisualSVN 损坏表示的主要内容,如果未能解决你的问题,请参考以下文章
TortoiseSVN与VisualSVN Server搭建SVN版本控制系统