【问题标题】:How to update an svn dump如何更新 svn 转储
【发布时间】:2013-11-02 00:53:10
【问题描述】:

我正在使用读取 svn 转储的 reposurgon,由以下人员简单创建:

svnadmin dump /svnroot/my-repo > svn_dump

但是我需要更新这个文件,因为我们仍在提交到存储库并且每次重新创建整个文件都非常耗时(几乎 60gig)。

所以我的问题是:

有没有办法每次都追加到这个文件上以避免完全重新创建转储?

理想情况下,无需手动记录每次转储的范围


更新

我设法使用增量转储来做到这一点,但是第一个文件之后的每个文件的前 4 行需要删除。

svnadmin dump -r0 /svnroot/my-repo --incremental                   > svn_dump
svnadmin dump -r1 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r2 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r3 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump
svnadmin dump -r4 /svnroot/my-repo --incremental | sed -n '5,$ p' >> svn_dump

# is the same as:
svnadmin dump -r0:4 /svnroot/my-repo                               > svn_dump

然而,这似乎相当临时,为了让它有用,我需要编写一个更全面的脚本。

【问题讨论】:

    标签: svn svnadmin svndump


    【解决方案1】:

    Apache Subversion 1.8 added support for incremental svnadmin hotcopy backups。在 1.8 版之前,svnadmin hotcopy 只能创建完整的备份,拒绝复制现有的热复制存储库。

    使用svnadmin hotcopy 而不是svnadmin dump / load 的主要好处是它的性能仅限于您的磁盘I/O 速度。

    【讨论】:

    • svnadmin hotcopy 复制存储库,而不是 svn 转储(问题明确指出需要 svn 转储,因为这是 reposurgon 读取的内容)
    【解决方案2】:

    你的转储文件真的很大。您是否在存储库中存储了大量二进制文件? 如果是这样,您可能需要考虑将二进制文件存储在其他位置。

    无论如何,incremental 转储的可能性是存在的。来自the svn manual

    两个有用的选项修改转储文件生成器的行为。这 首先是 --incremental 选项,它只是导致第一个 转储流中的修订以仅包含文件和目录 在该修订版中进行了修改,而不是作为补充 一棵新树,并且以与其他所有版本完全相同的方式 在转储文件中显示。这对于生成 要加载到另一个存储库中的相对较小的转储文件 已经拥有原版中存在的文件和目录 存储库。

    第二个有用的选项是 --deltas。此选项会导致 svnadmin 转储 to,而不是发出文件内容的全文表示和 属性列表,仅发出这些项目与其先前项目的增量 版本。这减少了(在某些情况下,极大地) svnadmin dump 创建的转储文件。然而,有 使用此选项的缺点 - 删除的转储文件更多 CPU 密集型创建,不能被 svndumpfilter 操作,并且 当 使用第三方工具,例如 gzip 和 bzip2。

    您可以拥有一个使用此功能的脚本,例如:

    $ svnadmin dump /var/svn/repos -r 21 --incremental > incr.dump
    * Dumped revision 21.
    

    您还可以使用其他有用的东西 - deltas! 例如,您可以每周进行一次full 备份,每天进行一次incrementaldeltas 备份。

    但是,如果您要存储大量二进制数据,请注意deltas 将非常无效。 svn 内部工作的方式在这里受到责备 - 它并不意味着存储二进制文件。

    一般的答案是您不能直接执行此操作 - 即您不能附加到转储文件。就是这样。

    【讨论】:

    • 是的,我已经阅读了 svn 手册的这一部分,但是这个答案没有解释如何更新现有的 svn 转储。也许逐步转储每个修订版然后附加在一起。但这意味着整个转储被存储了两次——一次是小文件,另一次是一个大文件。也许它很明显 - 但例如,您如何将增量应用于现有文件? - 更新转储的具体步骤是什么?此外,存储库的大小也不重要(项目使用 svn 存储二进制文件 - 它是一个有效的用例 - 游戏、电影等)。
    • 嗯,答案是你不能直接这样做 - 即你不能追加到转储文件。就是这样。
    • 它可以完成,请参阅我原始帖子中的更新,但是svnadmin 不支持开箱即用(似乎)。检查转储,找到最后的书面修订(或失败 - 只需将其记录在某处),然后将所有新修订附加到转储(可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2023-03-05
    • 2015-10-22
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多