如何更新 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
备份,每天进行一次incremental
和deltas
备份。
但是,如果您要存储大量二进制数据,请注意deltas
将非常无效。
svn 内部工作的方式在这里受到责备 - 它并不意味着存储二进制文件。
一般的答案是您不能直接执行此操作 - 即您不能附加到转储文件。就是这样。
【讨论】:
是的,我已经阅读了 svn 手册的这一部分,但是这个答案没有解释如何更新现有的 svn 转储。也许逐步转储每个修订版然后附加在一起。但这意味着整个转储被存储了两次——一次是小文件,另一次是一个大文件。也许它很明显 - 但例如,您如何将增量应用于现有文件? - 更新转储的具体步骤是什么?此外,存储库的大小也不重要(项目使用 svn 存储二进制文件 - 它是一个有效的用例 - 游戏、电影等)。 嗯,答案是你不能直接这样做 - 即你不能追加到转储文件。就是这样。 它可以完成,请参阅我原始帖子中的更新,但是svnadmin
不支持开箱即用(似乎)。检查转储,找到最后的书面修订(或失败 - 只需将其记录在某处),然后将所有新修订附加到转储(可能
以上是关于如何更新 svn 转储的主要内容,如果未能解决你的问题,请参考以下文章
svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录
如何解决svn清理失败 不能更新 cleanup失败 cleanup乱码 更新乱码 svn更新提示清理 清理乱码不能清理 svn故障修复SVN cleanup 陷入死循环 svn cleanup时遇