如何更新 svn 转储

Posted

技术标签:

【中文标题】如何更新 svn 转储【英文标题】:How to update an svn dump 【发布时间】: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

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

【问题讨论】:

【参考方案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 不支持开箱即用(似乎)。检查转储,找到最后的书面修订(或失败 - 只需将其记录在某处),然后将所有新修订附加到转储(可能

以上是关于如何更新 svn 转储的主要内容,如果未能解决你的问题,请参考以下文章

svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

idea 怎样关闭svn自动更新

如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇

SVN(TortoiseSVN)详细教程--SVN更新及如何解决冲突文件

如何将 SVN 转储文件导入 SourceForge?

当我在存储库中丢失一些修订时,如何转储所有 svn 数据?