SVN通过检测文件前1024字节自动判断二进制类型,但易误判,需手动设置svn:mime-type=application/octet-stream确保正确识别与处理;可单个或批量propset,或配置auto-props预设规则。

SVN 默认会通过检测文件前 1024 字节来判断是否为二进制文件:若含较多非 ASCII 字符(如空字节、控制字符等),就会自动设 svn:mime-type=application/octet-stream,将其标记为二进制。但有时它会误判(比如某些 XML、JSON 或配置文件),也可能需要**主动将特定文件设为二进制**(如 plist、.exe、.png 等),以避免 diff/merge 时出错。关键不是“能否添加”,而是“添加后是否被正确识别和处理”。
确认文件当前 mime-type 属性
在添加或提交前,先查它被 SVN 认为什么类型:
-
svn propget svn:mime-type 文件名—— 直接输出当前值,如application/xml或application/octet-stream -
svn plist -v 文件名—— 列出所有属性,便于排查其他干扰项(如svn:eol-style)
如果返回为空,说明没设 mime-type,SVN 会按内容自动判断;如果返回 application/octet-stream 或类似非 text/* 类型,就已明确标记为二进制。
手动设置为二进制(显式指定)
适用于明确不希望 diff/merge 的文件(如生成的 plist、图标资源、编译产物):
- 单个文件:
svn propset svn:mime-type application/octet-stream 文件名 - 批量设置(如所有 .plist):
svn propset svn:mime-type application/octet-stream *.plist - 执行
svn commit -m "mark .plist as binary"提交属性变更
设置后,svn diff 将跳过该文件(提示 “can't display: binary file”),svn merge 也会整文件覆盖,而非行级合并——这正是二进制文件的预期行为。
《SVN视频教程》,SVN:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。许多人会把版本控制系統想像成某种“时光机器”。
通过 auto-props 预设规则(推荐用于团队统一)
避免每次手动设置,修改本地 SVN 配置文件(~/.subversion/config):
- 找到
[auto-props]区块,取消注释或新增一行:*.plist = svn:mime-type=application/octet-stream - 确保
enable-auto-props = yes已启用 - 下次执行
svn add *.plist时,属性会自动附加,无需额外命令
注意:auto-props 只对 svn add 新增的文件生效,对已存在文件无效,需配合 svn propset 补设。
避免常见误操作
有些做法看似合理,实则无效或有害:
- 不要用
text/plain强行覆盖二进制文件——会导致 diff 错误解析乱码,merge 冲突不可控 - 不要删除
svn:mime-type属性指望 SVN 重判——SVN 不会重新扫描,仍按旧逻辑处理 - TortoiseSVN 用户可在右键 → Properties → Subversion 标签页直接编辑
svn:mime-type,图形界面更直观
核心原则:让 SVN 知道“你想要它怎么处理这个文件”,而不是让它猜。显式声明比默认推测更可靠。

















