【问题标题】:Recover a SVN repository from ONLY the db folder?仅从 db 文件夹恢复 SVN 存储库?
【发布时间】:2013-11-15 12:51:16
【问题描述】:

我有一个一年前的项目,我想从中恢复源代码。该项目的 SVN 存储库只有 db 文件夹;但是,db 文件夹似乎是完整的,包括 db/revs 文件夹中的所有文件。我没有这个 SVN 存储库的备份,我不知道应该在那里的所有其他文件发生了什么。

不出所料,我无法从此存储库中恢复工作副本。我尝试从工作存储库中复制基本数据库结构,并尝试使用 svnadmin recover,但无法从中获取任何数据。

是否可以从数据库中至少检索到最后一个工作副本?从那时起,我可以开始一个新的 SVN。

谢谢!

【问题讨论】:

    标签: svn recovery


    【解决方案1】:

    除了 db 目录之外,您确实不需要太多东西。

    这是 db 目录之外的内容: README.txt(只是说明这是一个 Subversion 存储库,没关系) conf(包含配置文件的目录,主要用于与 svnserve 一起使用,对于恢复 repo 的内容并不重要) 格式(指定 subversion repo 的格式,这应该是一个文件,其中仅包含“5\n”,并且自 Subversion 1.4.x 以来没有更改) hooks(带有钩子脚本的目录,不需要从 repo 中读取数据) 锁(锁定文件位置,用于自 1.3.x 之前未使用的真正旧存储库)

    svnadmin recover 在这种情况下并不是真的很有帮助。它主要用于基于 BDB 的存储库(您可能没有使用)。它在 FSFS 存储库中作用不大。

    但是你应该能够做到:

    svnadmin create new-repo
    rm -rf new-repo/db
    cp -a old-repo/db new-repo
    

    我建议您创建另一个新的 repo 并转储并重新加载到其中:

    svnadmin create final-repo
    svnadmin dump new-repo | svnadmin load final-repo
    

    您可能有一个包含低于 1.4.x 版本的 Subversion 的 repo,在这种情况下,您可能需要稍微操作一下格式文件。您可以在此处查看格式文件的历史记录(靠近顶部,阅读 SVN_REPOS__FORMAT_NUMBER 之前的注释): https://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_repos/repos.h

    当然,与往常一样,当尝试恢复某些内容时,它会针对副本而不是您唯一的副本。

    【讨论】:

    • 本,感谢您的回答。我实际上可能正在使用 Berkeley DB。按照您的指示,当我在机器上使用 svnadmin 时,出现此错误:“e720002:无法打开文件 'db\DB_CONFIG':系统找不到指定的文件。”但是,我试图从中恢复的“db”目录的布局肯定具有 fsfs 目录的结构:用于 revs、revprops、事务等的文件夹。我不确定从这里去哪里。
    • 你的db/format文件和db/fs-type文件的内容是什么?您可以尝试使用 svandmin create --fs-type=bdb new-repo 创建一个新的 BDB 存储库并将 DB_CONFIG 文件复制到您的存储库中。如果您有 BDB 存储库,那么 db 文件夹中的目录应该不会太多。然而,有名为修订和事务的文件(但不会有 revprops)。一如既往地使用副本来处理您所做的任何文件。
    • 本,非常感谢您的帮助。使用您的命令,我设法将数据库修复到可以开始从中获取差异的地步——那时我意识到数据库缺少 50% 的转速,这使得存储库的其余部分变得漂亮多没用。不确定其余数据消失到哪里,但我没有备份,这意味着我的查询必须结束。再次感谢您的帮助;答案已接受。
    • 很高兴我能帮上忙。很遗憾听到您无法恢复它。
    • 这正是我们所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多