如何告诉Subversion将文件视为二进制文件?

时间:2008-09-16 15:48:13

标签: svn

如何告诉Subversion(svn)将文件视为二进制文件?

10 个答案:

答案 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 book

的第367页
  

在最一般意义上,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。