3

我们有许多 xml 文件,其中大多数是 UTF-16 编码的。

当我使用 SmartSVN 将文件添加到 subversion 时,它总是得到 svn:mime-type=application/octet-stream。

这可以防止 SmartSVN 的可视 DIFF 工具处理这些非常烦人的文件。

来自 SVN 常见问题解答: http ://subversion.apache.org/faq.html#binary-files

当您第一次将文件添加或导入到 Subversion 时,会检查该文件以确定它是否为二进制文件。目前,Subversion 只查看文件的前 1024 个字节;如果任何字节为零,或者超过 15% 不是 ASCII 打印字符,则 Subversion 调用文件二进制。然而,这种启发式可能会在未来得到改进。

当使用 UTF-16 文件时,这是非常愚蠢的,因为它们在大多数情况下包含约 50% 的零。

我还读到有一种方法可以从 SVN 客户端自动设置属性: http ://www.mediawiki.org/wiki/Subversion/auto-props

这是否也允许删除自动检测到的二进制 mime 类型?

是否可以以某种方式在存储库/svn 服务器上设置它,所以我不必在每个工作站上都​​设置它?

4

2 回答 2

3
  1. 您不能仅为 UTF-16 XML 重新定义 mime-type(但可以 - 对于所有 xml)
  2. 我不知道在服务器或每个存储库的基础上重新定义 mim-type 的好方法

如果以上几点没有吓到您,您可以全局(每个客户端的主机)在客户端的 subversion 配置文件中重新定义 mime-type: %AppData%\Subversion\config,[auto-props]部分。就像是

*.xml = svn:mime-type=text/xml
于 2012-11-30T10:46:26.343 回答
2

svn:mime-type是一个 SVN 属性,所以你应该能够修改它。如果您将它设置在一台机器上并提交它,它应该在更新后反映在其他机器上。

然而,“二进制文件范式”是 SVN 内部工​​作的重要组成部分,尤其是目前不可更改的提交算法。差异实际上以二进制形式保存并附加到存储库中的每个文件。嗯,这是我从 SVN 1.6 文档中记得的内容。所以我不确定您是否可以更改“自动 mime 类型”应用程序。

您可以使用钩子(可能是提交后?)来检测正在按某些标准提交的文件,并在提交后对那些(那些)文件应用属性更改。当然,您当然可以通过一些编码来利用hooks 子系统为您执行此操作。(我不知道您使用的是哪个 SVN 版本,所以我提供了最新稳定版本的链接 - 1.7 书)

哦,还有一点来自 SVN 文档的复制/粘贴:

为了确定上下文合并是否可行,Subversion 检查 svn:mime-type 属性。如果文件没有 svn:mime-type 属性,或者具有文本的 MIME 类型(例如 text/*),Subversion 假定它是文本。否则,Subversion 假定文件是二进制文件。Subversion 还通过在 svn import 和 svn add 命令中运行二进制检测算法来帮助用户。这些命令会很好地猜测,然后(可能)在要添加的文件上设置二进制 svn:mime-type 属性。(如果 Subversion 猜错了,用户可以随时删除或手动编辑属性。)

所以简短的回答是,您可能无法强制 SVN 自动检测,但您可以对其进行编程。:)

希望这有帮助。

于 2012-11-30T09:39:11.253 回答