如何更新svn转储

时间:2013-11-02 00:53:11

标签: svn svnadmin svndump

我正在使用reposurgon读取svn dump的,简单地创建:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你的dumpfile非常大。您是否在存储库中存储了大量二进制文件? 如果是这样,您可能需要考虑将二进制文件存储在另一个位置。

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

  

两个有用的选项可修改转储文件生成器的行为。该   首先是--incremental选项,它首先导致它   转储流中的修订版仅包含文件和目录   在该修订版中修改,而不是作为添加项呈现   新树的结构,与每个其他修订完全相同   在转储文件中显示。这对于生成a非常有用   相对较小的转储文件要加载到另一个存储库中   已经拥有原始文件和目录   库中。

     

第二个有用的选项是--deltas。此选项会导致svnadmin转储   to,而不是发出文件内容的全文表示和   属性列表,仅发出这些项目与之前项目的增量   版本。这减少了(在某些情况下,大幅度)的大小   svnadmin转储创建的转储文件。但是,有   使用此选项的缺点 - 分层转储文件更多   要创建的CPU密集型,不能通过svndumpfilter进行操作,并且   当他们的时候,他们往往不会像他们的非提升者一样压缩   使用第三方工具,如gzip和bzip2。

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

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

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

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

一般的答案是你不能直接这样做 - 即你不能附加到转储文件。那就是它。