我使用读取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
然而,这似乎是相当额外的,为了有用,Id 需要编写一个更全面的脚本。
Apache Subversion 1.8 增加了对增量svnadmin hotcopy
备份的支持。在 1.8 版之前,svnadmin hotcopy
只能创建完整备份,拒绝复制现有的热复制存储库。
使用 svnadmin hotcopy
而不是 svnadmin dump / load
的主要好处是它的性能仅限于磁盘 I/O 速度。
你转储文件真的很大。您是否在存储库中存储了大量二进制文件?如果是这样,您可能需要考虑将二进制文件存储在另一个位置。
无论如何,都有可能发生incremental
转储。来自 svn 手册:
两个有用的选项修改转储文件生成器的行为。这 第一个是 --incremental 选项,它只会导致第一个 修订转储流以仅包含文件和目录 在该修订中进行了修改,而不是作为补充提出 一棵新树,并且与其他每个修订版完全相同 在转储文件中显示。这对于生成 要加载到另一个存储库的相对较小的转储文件 已经有原始文件中存在的文件和目录 存储 库。
第二个有用的选项是 --deltas。此选项会导致 svnadmin 转储 到,而不是发出文件内容的全文表示形式和 属性列表,仅发出这些项相对于其先前项的增量 版本。这减少了(在某些情况下,大大减少)的大小 SVN管理员转储创建的转储文件。然而, 使用此选项的缺点 — 删除转储文件更多 创建时需要占用大量 CPU,无法由 svndumpfilter 操作,并且 在以下情况下,往往不会像未妄想的对应物那样压缩 使用第三方工具,如 gzip 和 bzip2。
您可以有一个使用此功能的脚本,例如:
$ svnadmin dump /var/svn/repos -r 21 --incremental > incr.dump
* Dumped revision 21.
您还可以使用其他有用的东西 - deltas
!例如,您可以每周进行一次full
备份,每天进行一次incremental
和deltas
备份。
但是,如果您要存储大量二进制数据,请注意deltas
将非常无效。svn 内部的工作方式在这里是罪魁祸首 - 它只是不打算存储二进制文件。
一般的答案是你不能直接这样做 - 即你不能附加到转储文件。就是这样。