如何修复一个版本损坏的存储库?

2024-04-08

我的家庭服务器出现硬盘故障。

当我意识到磁盘正在运行时,我登录并直接复制了我的存储库,其中包含多个项目。

然而,由于磁盘出现故障,其中一项修订已损坏:

$ svnadmin verify master/
[...]
* Verified revision 820.
* Verified revision 821.
* Verified revision 822.
svnadmin: No such revision 823

The master/db/revs/ and master/db/revprops/目录确实不包含任何名为823,因此此修订版丢失(损坏)。还有后续的修订(我真的想保留!)master/存储库将更新至修订版 #947。

今天,我获取了最新的异地备份(!),其中很高兴包含此修订版。我想“治愈”损坏的存储库master/通过修复丢失的修订版,因为它比备份更新。

我确保将转储文件加载到新创建的存储库中,其版本与中复制的版本相同master/,所以都是旧的“线性”格式 3。

我尝试了显而易见的方法,只是复制文件823从备份的db/revs/ and db/revprops/目录:

$ cp repos/db/revs/0/823 master/db/revs/
$ cp repos/db/revprops/0/823 master/db/revprops/

目录repos/包含已从备份转储加载的存储库。现在我得到:

$ svnadmin verify master/
[...]
* Verified revision 821.
* Verified revision 822.
svnadmin: /build/buildd/subversion-1.6.12dfsg/subversion/libsvn_delta/compose_delta.c:165: search_offset_index: Assertion `offset < ndx->offs[ndx->length]' failed.
Aborted

这不太令人鼓舞。我尝试过其他各种svnadmin命令,但没有一个能让验证者满意。

我的下一个想法是取消复制并从损坏的存储库的“新”副本开始,然后转储修订版本after823,并与备份合并。但这似乎不可能,我无法在丢失的版本之后转储修订版本:

$ svnadmin dump -r 824 master/ >r824.dmp
svnadmin: No such revision 823

请注意,它对使转储“增量”没有帮助,希望它应该假装世界从修订版 824 开始,然后从那里开始:

$ svnadmin dump --incremental -r 824:947 master/ > dump.txt
svnadmin: No such revision 823

这会将输出写入dump.txt,但我不确定它是否可以依赖。请注意,它不会记录已成功转储any修订。

Update:我有另一个想法:从 crashing-disk-copy 中复制较新的修订文件master/进入备份,提供“缺失的尾巴”:

$ for a in $(seq 910 947) ; do cp  master/db/revs/$a repos/db/revs ; cp master/db/revprops/$a repos/db/revprops/ ; echo $a ; done

然而,这似乎除了破坏目标存储库之外什么也没做:

$ svnadmin verify repos/
[...]
* Verified revision 907.
* Verified revision 908.
* Verified revision 909.
svnadmin: Corrupt representation '907 21815 45 30922 158d3e72732f45bf6f02919b22fc899a'
svnadmin: Malformed representation header

现在,我已经没有想法了。


我解决了。

一旦我意识到,解决方案(当然)是显而易见的。

我有这个:

  • master/:损坏的存储库的副本,具有修订版 0..947,修订版 823 的文件物理丢失。
  • repos/:从备份(转储文件)加载的存储库,涵盖修订版 0..910。

解决方案就是简单地转储master/,从修订版 911 起。这是可能的,没有任何错误,我认为这意味着 911..947 范围内的任何修订都没有直接依赖于修订 823 中的状态,或者其他:

$ svnadmin dump --incremental -r 911:947 master/ > tail.txt
* Dumped revision 911.
* Dumped revision 912.
* Dumped revision 913.
[...]
* Dumped revision 947.

无论如何,然后只需将转储应用到来自备份的存储库:

$ cat tail.txt | svnadmin load repos/
[lots of commits]

现在我已经恢复了完整的历史记录,没有问题:

$ svnadmin verify repos/
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
[...]
* Verified revision 945.
* Verified revision 946.
* Verified revision 947.

Yay!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复一个版本损坏的存储库? 的相关文章

  • 如何继续 Subversion 中失败的加载

    我已经开始将颠覆转储加载到存储库中 在它完成之前 我耗尽了配额 命令停止了 我已要求更多配额 但现在我不知道如何继续进口 我应该简单地重做相同的命令吗 svnadmin load parent dir Software xxx module
  • 将大型 SVN 存储库迁移到 git

    我有一个大型 SVN 存储库 大约 140GB 其中包含许多项目 并且不遵循 svn 推荐的目录结构 从所有这些数据 包括二进制文件 发布版本和依赖项 来看 我真正关心的是特定路径 与其他所有数据相比 该路径实际上具有非常小的历史记录 到目
  • 如何阻止 SVN Checkout 恢复从项目中删除的文件?

    我们是 subversion tortoisesvn ankhsvn 堆栈的新手 虽然在 Studio 2008 中我们从项目中删除了文件 但问题是当我们在 CI 构建中执行 svn checkout 时 我们会得到已删除的文件 如何防止这
  • 你能帮助解释我的 svn diff 输出吗?

    我正在使用 SVN DIFF 比较两个文件夹 一个在分支中 一个在主干中 目的是确定更改列表 然后我对分支中的文件进行了一些更改 但输出显示我已经在主干中修改了它们 为什么会出现这种情况 有没有更好的命令来获取我正在寻找的结果 我现在使用的
  • 如何使用 SVN 和 .NET 以编程方式进行文件版本控制?

    我们有一个报告生成器 每天 它都会将数据写入 Excel 文件 出于版本控制和文件数据安全的原因 我们需要更改此文件 并将更改提交到存储库中 您推荐您使用过的任何 net SVN API 吗 你应该看看SharpSvn http sharp
  • SSIS 包损坏,错误为 0xC00CE504

    我有一个损坏的 SSIS 包 并显示错误消息 由于错误 0xC00CE504 名称以无效字符开头 第 13 行第 2 列 无法加载 XML 当加载包并且文件无法打开或无法正确加载到 XML 文档时会发生这种情况 这可能是由于向 LoadPa
  • 将非标准 svn 转换为 git

    我们有一个非标准的 svn 设置 如下所示 Root gt Trunk gt Projects gt Project 1 gt Project 2 gt Project 3 gt Libraries gt Library 1 gt Libr
  • 修复颠覆中犯下的错误

    这似乎是人们可能想要用颠覆做的最基本的事情之一 但我使用版本控制系统的时间并不长 不知怎的 我似乎无法弄清楚这一点 而且我不知道在哪里svn文档看看 基本上 修订版 167 工作得很好 但我犯了一个错误 并将其提交为修订版 168 而且我不
  • 如何在 svn 存储库中搜索任何修订版中是否存在文件

    如何搜索名为foo txt曾经提交到我的 svn 存储库 在任何修订版中 右键单击签出文件夹的根目录 gt TortoiseSVN gt 显示日志 您也可以在那里输入文件名
  • 用于 Tortoise 客户端的 Windows Subversion 服务器 (SVN)

    我的问题是这样的 在 Windows 上使用的 Subversion Server https stackoverflow com questions 615866 subversion server to use on windows 唯
  • 嵌套 svn 存储库

    我在存储库中有一个 项目 A 但在该项目中 我使用了一个托管在 Google Code 上的库 我的问题是 有什么办法可以让该库文件 挂钩 到 Google Code SVN 同时将我的项目放在我的存储库中 它是该库的父级 这样我就可以在决
  • 使用 git 客户端和 SVN 存储库的最佳工具/方法

    我已经使用 SVN 大约两年了 主要是通过 TortoiseSVN 和 IntelliJ 并尝试了 git 主要是通过 TortoiseGIT 在这里检测到模式 我们公司正在使用 SVN 作为存储库 他们不会考虑很快进行切换 在本地使用 g
  • 如何将svn文件夹上一级

    我需要将 svn 文件夹移至上一级并保留所有历史记录 所有文件和目录来自https myserver com svn Project trunk into https myserver svn Project 我使用一个命令 svn mov
  • Subversion:暂存文件以显式提交?

    我已经非常习惯 git 的方式 即必须接触要提交的每个文件 并且在执行此操作时仔细检查差异 现在在工作中我必须使用 svn 并且我总是不小心提交一些东西 有没有办法让 subversion 的行为像 git 一样 因为我必须明确告诉每个文件
  • 重新创建 svn 存储库

    在一次重大服务器故障之后 svn 存储库被破坏 我的工作版本是最新版本 从我的工作版本重新创建 svn 存储库的方法是什么 在新服务器上安装 svn 并尝试我的工作副本之后 svn switch NEW SVN PATH 我收到一个错误 R
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • 在 SVN 存储库中导入 Android Studio 项目的正确方法是什么?

    我正在尝试在 SVN 存储库中导入 Android Studio 项目 我显然尝试过 VCS gt 导入到版本控制 gt 导入到 Subversion 但问题是 即使取消选中Include ignored resources框内 软件不断将
  • 构建版本与修订号

    我有一个使用 subversion 进行源代码控制的 asp net C 应用程序 我的应用程序会在每个构建上自动增加其 AssembleVersion 和 AssemblyFileVersion 这就像一个魅力 并在网站的管理端显示构建号
  • Python Subversion 包装器库

    在颠覆的文档 http svnbook red bean com en 1 7 svn developer usingapi html svn developer usingapi otherlangs有一个从 Python 使用 Subv
  • TortoiseSVN 不允许我添加任何文件

    我正在尝试使用 TortoiseSVN 1 8 1 将文件添加到 SVN 存储库 我右键单击这些文件并选择 TortoiseSVN gt Add 然后 我选择弹出窗口中的所有文件 然后单击 确定 单击 确定 后 会弹出另一个对话框 所有文件

随机推荐