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

Svn 如何告诉Subversion将文件视为二进制文件?,svn,Svn,如何告诉Subversion(svn)将文件视为二进制文件?例如: svn propset svn:mime-type image/png foo.png 根据,您可以使用svn propset将svn:mime type属性更改为application/octet streamsvn查找mime type属性,如果它不存在,则猜测它是文本。您可以明确设置此属性,请参见基本上,您必须将mime类型设置为八位字节流: svn propset svn:mime-type application/o

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

例如:

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

根据,您可以使用svn propset将svn:mime type属性更改为application/octet stream

svn查找mime type属性,如果它不存在,则猜测它是文本。您可以明确设置此属性,请参见

基本上,您必须将mime类型设置为八位字节流:

svn propset svn:mime-type application/octet-stream <filename>
svn propset svn:mime类型应用程序/八位字节流

默认情况下,它通常会为您执行此操作,但如果不是,则需要查看文件属性和属性集

摘自本手册第367页

一般来说,Subversion比CVS更优雅地处理二进制文件。 因为CVS使用RCS,所以它只能存储不断变化的二进制文件的连续完整副本。 但是,Subversion使用二进制差分算法表示文件之间的差异, 无论它们包含文本数据还是二进制数据。这意味着所有文件都是 差异存储(压缩)在存储库中

CVS用户必须使用-kb标志标记二进制文件,以防止数据被篡改(到期) 到关键字扩展和行尾翻译)。他们有时会忘记这样做

颠覆采取了更偏执的路线。首先,它从不执行任何类型的关键字或 行结束翻译,除非您明确要求它这样做(请参阅“关键字”部分 “替换”和“行尾字符序列”部分了解更多详细信息)。 默认情况下,Subversion将所有文件数据视为文本字节字符串,并且始终存储文件 在存储库中处于未翻译状态

其次,Subversion保留了文件是“文本”还是“二进制”数据的内部概念, 但这一概念仅存在于工作副本中。在svn更新期间,Subversion将 对本地修改的文本文件执行上下文合并,但不会尝试对 二进制文件

为了确定上下文合并是否可行,Subversion检查 svn:mime类型属性。如果文件没有svn:mime-type属性,或具有mime 类型是文本的(例如text/*),Subversion假定它是文本。否则,颠覆 假定文件是二进制文件。Subversion还通过运行二进制检测算法来帮助用户 在svn导入和svn添加命令中。这些命令将是一个很好的例子 猜测,然后(可能)在要添加的文件上设置一个二进制svn:mime-type属性。 (如果Subversion猜错了,用户始终可以删除或手动编辑该属性。)

手工编辑将由

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

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

,尽管Subversion会尝试检查文件是否为二进制文件,但您可以使用重写mime类型。
例如,
svn-propset-svn:mime-type-application/octet-stream-example.txt
。这将使您的文件充当字节的集合,而不是文本文件。另请参见上的svn手册。

可以使用以下方法手动将存储库中的文件标识为二进制文件:

svn propset svn:mime-type application/octet-stream <filename>
svn propset svn:mime类型应用程序/八位字节流
这通常是不必要的,因为Subversion将在首次添加文件时尝试确定文件是否为二进制文件。如果Subversion错误地将某个类型标记为“文本”,而该类型应被视为二进制,则可以将Subversion配置为自动将该文件标记为非文本MIME类型。无论文件上配置了哪些属性,Subversion都会在存储库中以二进制格式存储文件

如果Subversion将MIME类型标识为“文本”类型,它将启用某些二进制文件上不可用的功能,例如svn diff和svn BURN。它还允许自动行结束转换,可以逐个客户端进行配置


有关详细信息,请参见

如果“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

只是为了更新自动检测算法的链接:导入时如何执行此操作?也就是说,在它进入存储库之前?我的用例是svn不会导入的文件,因为它认为它是格式错误的文本(行尾不一致)。但它是测试数据,因此文件的行尾不一致……在实际情况下,我宁愿指定文件的特定(二进制)MIME类型,而不是通用的
应用程序/octet流
,它至少可以通过文件扩展名找到或在线查找。