svnadmin 只转储文本,没有二进制文件

Posted

技术标签:

【中文标题】svnadmin 只转储文本,没有二进制文件【英文标题】:svnadmin dump of text only, without binary files 【发布时间】:2012-12-20 10:17:27 【问题描述】:

可以过滤svndamin dump生成的SVN转储,所以它不会包含编码的二进制数据,只包含文本增量和数据?

我想转储现有的大型 SVN 存储库,但只转储代码。我对存储的二进制文件不感兴趣。但是,二进制文件会使转储文件变得不必要地大。如何生成转储并排除二进制内容?

已经尝试过但失败了:

    处理svn log 差异是不切实际的。它是一个大型且旧的存储库,仅在短时间内获取差异会花费大量时间并且经常卡住。 二进制文件分散在各处,并且没有存储在单个已知路径下,因此我不能使用svndumpfilter 排除它们 - 除非有某种方法可以将此过滤器与正则表达式一起使用,例如*.jar

【问题讨论】:

【参考方案1】:

svndumpfilter 是任何 Subversion 安装的一部分

svndumpfilter exclude — 从转储流中过滤出具有给定前缀的节点。

从 Subversion 1.7 开始,svndumpfilter 可以选择性地将 PATH_PREFIX 不仅视为显式子字符串,还可以视为文件模式。

$ svndumpfilter exclude --pattern "*.OLD" < dumpfile > filtered-dumpfile
Excluding prefix patterns:
   '/*.OLD'

【讨论】:

你知道svndumpfilter是否接受“or-patterns”,比如“*.jar|*.pdf”吗? @LittleBobbyTables - 不,只有单一模式。但是您可以在单个命令中使用多个 exclude【参考方案2】:

我不知道有什么库存工具可以做到这一点。但是如果你从这个 perl 模块开始,应该不难做到:SVN::Dumpfilter

其中的一个示例脚本 (svndump_delpathfilter) 可能与您想要的非常接近。我对这个模块的经验是,你可能需要稍微修改一下才能让它做你想做的事情。

现在,我认为没有任何方法可以可靠地从文本文件中分辨出二进制文件,因为 Subversion(在最低级别)并不真正关心。快速扫描我的存储库显示 svn:mime-type 属性并不总是设置,并且我看不到其他指示性字段。因此,您必须通过名称检查或(以某种方式)尝试查看文件的内容(但我从未做过后者)。

【讨论】:

以上是关于svnadmin 只转储文本,没有二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

解析ASCII十六进制转储以正确转换为二进制

如何从特定的二进制文件格式中提取文本?

在 VS 2005 中只转储一部分内存

svnadmin 加载校验和错误

svnadmin 转储因其中一个修订版中的错误而停止

核心转储文件分析[重复]