【问题标题】:Restoring SVN repository from backups从备份中恢复 SVN 存储库
【发布时间】:2011-11-13 05:11:29
【问题描述】:

我使用 Doug Hellmann 的脚本来备份我的 repo 已有 2 年了,但我最终丢失了我的服务器硬盘。所以我在另一台机器上创建了一个全新的 repo,并尝试了 restore 命令,即:

gunzip -c `ls -tr dump*` | svnadmin load /home/svn/myproject

只是它不起作用。它给出了响应

<<< Started new transaction, based on original revision 917
svnadmin: File not found: transaction '0-1', path 'MineSweeper2/src/com/bytezone/minesweeper2/Game.java'
     * editing path : MineSweeper2/src/com/bytezone/minesweeper2/Game.java ...denis@ubuntu-lianli:~/SVN backups$

谁能解释这里出了什么问题?我已经做了所有的增量备份,这肯定是最简单的情况。

顺便说一句,是否可以在尝试加载之前将十几个备份文件压缩成一个文件?

【问题讨论】:

    标签: svn restore


    【解决方案1】:

    似乎没有按正确的顺序处理备份。 svnadmin load 复制在存储库中所做的提交以获得新副本。似乎正在寻求提交文件修改,但尚未创建文件,因为提交的顺序不正确。

    【讨论】:

    • 它们应该是正确的顺序(由于 -t 选项),但我确实先将它们复制到新服务器,因此可能重新排序了时间戳。我实际上无法分辨,因为它们现在似乎都有相同的时间戳。
    • 我见过很多复制多个文件时不考虑顺序的复制操作。你不能使用字母顺序吗?如果您逐个运行第一个转储会发生什么?
    • 谢谢。我按顺序“触摸”了每个文件,现在它可以工作了。
    【解决方案2】:

    我不得不快速浏览一下他的剧本。看起来您只对自上次转储以来发生的更改执行转储文件,然后压缩它们。

    如果是这种情况,应该可以解压缩所有压缩备份,然后以正确的顺序将它们连接在一起以创建一个有效的转储文件。 p>

    按正确的顺序是关键。看起来他在转储文件的名称中保留了修订范围,但修订号不是零填充的,这意味着对文件名进行排序可能是一个问题。

    也许可以根据备份文件的cdatemdate 对转储文件进行排序,但这有点冒险。

    转储文件的名称是${dumpfilename}-${repo_name}-${first}-${last}.${compress_ext},因此可以使用-作为字段分隔符并按数字对第三个字段进行排序。

    sort -t - -k3,3n
    

    这将使它们按正确的顺序排列。然后你也许可以做这样的事情:

    ls | sort -t - -k3,3n | while read backup
    do
        bzcat $backup | svnadmin load $repos
    done
    

    当然,这完全未经测试,因为我没有尝试过 Doug Hellmann 的脚本,但这应该非常接近。您可以通过执行以下操作将所有内容合并到一个转储中:

    ls | sort -t - -k3,3n | while read backup
    do
       bzcat $backup >> $dumpfile
    done
    

    希望有效。或者,至少让你朝着正确的方向前进。

    【讨论】:

    • 谢谢。我通过手动更改时间戳来使其工作,但如果名称是零填充的(如您所建议的那样)并且如果恢复命令按名称排序会更容易。我会尝试你建议的合并步骤。
    • 这是 Kornshell 比 Bash 工作得更好的时期之一。在 Kornshell 中,您可以使用 typeset 将变量声明为固定宽度零填充变量。你做typeset -Z first 就可以解决问题。在 Bash 中,您可以使用 printffirst 格式化为零填充,这真的很有帮助。这是一个很小的变化,但会使恢复变得更加容易。至少你不必做时髦的sort 来让事情按正确的顺序排列。 ls 会自动为您完成。我会向作者建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 2012-10-28
    • 2011-07-26
    • 2010-10-01
    相关资源
    最近更新 更多