【问题标题】:How to force SVN to detect UTF-16 XML files as plaintext files by default?如何强制SVN默认将UTF-16 XML文件检测为纯文本文件?
【发布时间】:2012-11-28 15:40:53
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: svn mime-types smartsvn


    【解决方案1】:
    1. 您不能只为 UTF-16 XML 重新定义 mime-type(但可以 - 为所有 xml)
    2. 我不知道在服务器或每个存储库基础上重新定义 mim 类型的好方法

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

    *.xml = svn:mime-type=text/xml
    

    【讨论】:

    • SVN 似乎没有提供简单的服务器端方法(提交挂钩可能会像 Borislav 建议的那样工作),所以我想 auto-props 解决方案是最好的折衷方案。
    • 嗯,这是一个有趣的客户端方法。如果我需要它,我会记住这一点。
    【解决方案2】:

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

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

    您可以使用钩子(可能是提交后?)来检测根据某些标准提交的文件,并在提交后为该(那些)文件应用属性更改。您当然可以使用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 自动检测这一点,但您可以对其进行编程以做到这一点。 :)

    希望这会有所帮助。

    【讨论】:

    • 提交后钩子没有访问并且对修订中的单独文件一无所知(作为钩子的参数)......并且propset意味着自动一个额外的提交
    • @LazyBadger 你不能使用 svnlook “检查”修订版中的文件吗?
    • 可以:svnlook changed | grep xml | xargs ... - 奇怪!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2011-04-13
    • 2021-12-30
    • 2011-09-28
    • 2016-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多