如何强制SVN默认将UTF-16 XML文件检测为纯文本文件?

时间:2012-11-28 15:40:54

标签: svn mime-types smartsvn

我们有许多xml文件,其中大部分都是UTF-16编码。

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

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

来自SVN FAQ: 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类型?

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

2 个答案:

答案 0 :(得分:3)

  1. 您不能仅为UTF-16 XML重新定义mime-type(但可以 - 对于所有xmls)
  2. 我不知道在服务器上或基于每个存储库重新定义mim-type的好方法
  3. 如果以上几点没有吓到你,你可以在全局(每个客户端的主机)重新定义客户端的subversion配置文件上的mime-type:%AppData%\Subversion\config[auto-props]部分。像

    这样的东西
    *.xml = svn:mime-type=text/xml
    

答案 1 :(得分:2)

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

然而,“二进制文件范例”是SVN内部工作的一个重要部分,尤其是目前不可更改的提交算法。差异实际上保持二进制并附加到repo中的每个文件。嗯,这是我记得的SVN 1.6文档。所以我不确定你是否可以改变“auto mime-type”应用程序。

您可以使用钩子(可能是post-commit?)来检测某些条件下提交的文件,并在提交后对这些(那些)文件应用属性更改。当然,您可以使用the hooks sub-system为您做一些编码。 (我不知道你使用的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自动检测到这一点,但是你可以对它进行编程。 :)

希望这会有所帮助。