如何告诉Subversion(svn)将文件视为二进制文件?
答案 0 :(得分:81)
可以使用以下方法手动将位于存储库中的文件识别为 binary :
svn propset svn:mime-type application/octet-stream <filename>
这通常不是必需的,因为Subversion将在首次添加文件时尝试确定文件是否为二进制文件。如果Subversion错误地将某个类型标记为“text”,则应将其视为二进制,则可以将Subversion的auto-props feature配置为使用非文本MIME类型自动标记该文件。无论文件上配置的属性如何,Subversion仍然以存储库中的二进制格式存储文件。
如果Subversion将MIME类型标识为“文本”类型,则它会启用二进制文件上不可用的某些功能,例如 svn diff 和 svn blame 。它还允许自动行结束转换,可在逐个客户端的基础上进行配置。
有关详细信息,请参阅How does Subversion handle binary files?
答案 1 :(得分:20)
在最一般意义上,Subversion比CVS更优雅地处理二进制文件。 由于CVS使用RCS,因此它只能存储更改的二进制文件的连续完整副本。 然而,Subversion使用二进制差分算法表示文件之间的差异, 无论它们是否包含文本或二进制数据。这意味着所有文件都是 在存储库中以差异方式存储(压缩)。
CVS用户必须使用-kb标记标记二进制文件,以防止数据出现乱码(到期) 关键字扩展和行结束翻译)。他们有时会忘记这样做。
Subversion采取更偏执的路线。首先,它从不执行任何类型的关键字或 除非您明确要求它执行此操作,否则将结束翻译(请参阅“关键字”一节 替换“和更多细节称为”行尾字符序列“的部分)。 默认情况下,Subversion将所有文件数据视为文字字节字符串,并始终存储文件 在存储库中处于未翻译状态。
其次,Subversion维护一个文件是“文本”还是“二进制”数据的内部概念, 但这个概念只存在于工作副本中。在svn更新期间,Subversion会 对本地修改的文本文件执行上下文合并,但不会尝试这样做 二进制文件。
要确定是否可以进行上下文合并,Subversion会检查 svn:mime-type属性。如果文件没有svn:mime-type属性,或者有MIME 类型是文本的(例如,text / *),Subversion假定它是文本。否则,Subversion 假设文件是二进制文件。 Subversion还通过运行二进制检测算法来帮助用户 在svn import和svn add命令中。这些命令会很好 猜测然后(可能)在要添加的文件上设置二进制svn:mime-type属性。 (如果Subversion猜错了,用户可以随时删除或手动编辑属性。)
手动编辑将由
完成svn propset svn:mime-type some/type filename.extension
答案 2 :(得分:15)
基本上,您必须将mime类型设置为octet-stream:
svn propset svn:mime-type application/octet-stream <filename>
答案 3 :(得分:13)
如果'svn add'猜出错误的类型并给出如下错误:
svn: E200009: File 'qt/examples/dialogs/configdialog/images/config.png' has inconsistent newlines
svn: E135000: Inconsistent line ending style
然后解决方法是添加没有属性的文件,然后在第二步中设置属性:
svn add --no-auto-props qt/examples/dialogs/configdialog/images/config.png
svn propset svn:mime-type image/png qt/examples/dialogs/configdialog/images/config.png
答案 4 :(得分:8)
例如:
svn propset svn:mime-type image/png foo.png
答案 5 :(得分:4)
虽然Subversion尝试automatically detect文件是否为二进制文件,但您可以使用svn propset覆盖mime-type。
例如,svn propset svn:mime-type application/octet-stream example.txt
。这将使您的文件充当字节集合而不是文本文件。另请参阅File Portability上的svn手册。
答案 6 :(得分:3)
如果在Windows中使用tortoise svn,请右键单击该文件并转到属性。单击new并添加svn:mime-type类型的新属性。对于值put:application / octet-stream
答案 7 :(得分:2)
根据Subversion FAQ,您可以使用svn propset将 svn:mime-type 属性更改为 application / octet-stream
答案 8 :(得分:2)
svn查找mime-type属性,如果它不存在则猜测它是文本。您可以明确设置此属性,请参阅http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html
答案 9 :(得分:0)
默认情况下,它通常会为您执行此操作,但如果不是,则需要查看文件属性和propset。