3

我正在使用读取 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

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

4

2 回答 2

1

Apache Subversion 1.8增加了对增量svnadmin hotcopy备份的支持。在 1.8 版之前,svnadmin hotcopy只能创建完整的备份,拒绝复制现有的热复制存储库。

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

于 2013-11-04T11:28:21.213 回答
0

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

无论如何,有incremental转储的可能性。从svn手册

两个有用的选项修改转储文件生成器的行为。第一个是 --incremental 选项,它只是使转储流中的第一个修订版仅包含在该修订版中修改的文件和目录,而不是以添加新树的方式呈现,并且以完全相同的方式显示转储文件中的所有其他修订。这对于生成一个相对较小的转储文件以加载到另一个存储库中很有用,该存储库已经具有原始存储库中存在的文件和目录。

第二个有用的选项是 --deltas。这个选项会导致 svnadmin dump,而不是发出文件内容和属性列表的全文表示,而是只发出这些项目相对于它们以前版本的增量。这会减少(在某些情况下,极大地) svnadmin dump 创建的转储文件的大小。然而,使用这个选项也有一些缺点——deltified 转储文件创建起来更耗费 CPU,不能由 svndumpfilter 操作,并且在使用第三方工具(如 gzip 和bzip2.

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

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

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

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

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

于 2013-11-03T19:08:18.967 回答