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

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

可以使用以下命令手动将存储库中的文件识别为二进制文件

svn propset svn:mime-type application/octet-stream <filename> 

这通常是不必要的,因为Subversion会在第一次添加文件时尝试确定文件是否是二进制文件。 如果Subversion在将二进制文件视为二进制文件时将某种types标记为“文本”,则可以configurationSubversion的自动道具function,以便使用非文本MIMEtypes自动标记该文件。 无论在文件中configuration的属性如何,Subversion仍然以二进制格式将文件存储在存储库中。

如果Subversion将MIMEtypes标识为“文本”types,它将启用某些在二进制文件中不可用的function,如svn diffsvn blame 。 它还允许自动行结束转换,可以在逐个客户端的基础上进行configuration。

有关更多信息,请参阅Subversion如何处理二进制文件?

从Subversion书的第367页

从一般意义上讲,Subversion比CVS更适合处理二进制文件。 由于CVS使用RCS,它只能存储更改二进制文件的连续完整副本。 但是,Subversion使用二进制差异algorithm表示文件之间的差异,而不pipe它们是否包含文本或二进制数据。 这意味着所有的文件都会以不同的方式(压缩)存储在存储库中。

CVS用户必须使用-kb标志标记二进制文件,以防止数据被乱码(由于关键字扩展和行结束转换)。 他们有时会忘记这样做。

颠覆采取更偏执的路线。 首先,除非你明确要求这样做,否则它不会执行任何types的关键字或行结束转换(有关更多详细信息,请参见“关键字replace”一节和“行尾字符序列”一节)。 默认情况下,Subversion将所有文件数据视为文字字节string,并且文件始终以未翻译状态存储在存储库中。

其次,Subversion维护一个文件是“文本”还是“二进制”数据的内部概念,但是这个概念只在工作副本中存在。 在svn更新期间,Subversion将在本地修改的文本文件上执行上下文合并,但是不会为二进制文件尝试这样做。

为了确定上下文合并是否可行,Subversion检查svn:mime-type属性。 如果该文件没有svn:mime-type属性,或者具有文本的MIMEtypes(例如,text / *),则Subversion将其假定为文本。 否则,Subversion认为该文件是二进制的。 Subversion还通过在svn import和svn add命令中运行二进制检测algorithm来帮助用户。 这些命令会作出一个很好的猜测,然后(可能)在要添加的文件上设置一个二进制svn:mime-type属性。 (如果Subversion猜测错误,用户可以随时删除或手动编辑属性。)

手编辑将通过

 svn propset svn:mime-type some/type filename.extension 

基本上,你必须将MIMEtypes设置为八位字节stream:

 svn propset svn:mime-type application/octet-stream <filename> 

如果'svn add'猜测错误的types,并给你一个错误,如下所示:

 svn: E200009: File 'qt/examples/dialogs/configdialoghttp://img.dovov.comconfig.png' has inconsistent newlines svn: E135000: Inconsistent line ending style 

那么解决方法是添加没有属性的文件,然后在第二步中设置属性:

 svn add --no-auto-props qt/examples/dialogs/configdialoghttp://img.dovov.comconfig.png svn propset svn:mime-type image/png qt/examples/dialogs/configdialoghttp://img.dovov.comconfig.png 

例如:

 svn propset svn:mime-type image/png foo.png 

尽pipeSubversion试图自动检测一个文件是否是二进制的,你可以使用svn propset来覆盖mimetypes。 例如, svn propset svn:mime-type application/octet-stream example.txt 。 这将使您的文件充当字节集合而不是文本文件。 另请参阅文件可移植性的svn手册。

如果在Windows中使用tortoise svn,请右键单击该文件并转到属性。 点击new并添加一个新的svn:mime-type属性。 对于put的值:application / octet-stream

svn寻找一个mimetypes的属性,如果它不存在,猜测它是文本。 您可以明确地设置此属性,请参阅http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html

根据Subversion FAQ ,你可以使用svn propset来将svn:mime-type属性改为application / octet-stream

它通常默认为你做,但如果不是你需要查看文件属性和propset。