it-swarm.cn

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

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

62
Nick

可以使用以下方法手动将位于存储库中的文件识别为 binary

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

这通常不是必需的,因为Subversion将在首次添加文件时尝试确定文件是否为二进制文件。如果Subversion错误地将某种类型标记为“文本”,则应将其视为二进制,则可以配置Subversion的 auto-props功能 自动标记具有非文本MIME类型的文件。无论文件上配置的属性如何,Subversion仍然以存储库中的二进制格式存储文件。

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

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

81
stormlash

Subversion书的第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
20
Evil Andy

基本上,您必须将mime类型设置为octet-stream:

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

如果'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
13
user1454388

例如:

svn propset svn:mime-type image/png foo.png
8
Jan Krüger

虽然Subversion尝试 自动检测 文件是否为二进制文件,但您可以使用 svn propset 覆盖mime类型。例如,svn propset svn:mime-type application/octet-stream example.txt。这将使您的文件充当字节集合而不是文本文件。另请参阅/ svn手册 文件可移植性

4
grammar31

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

3
Brian R. Bondy

根据 Subversion FAQ ,您可以使用svn propset将 svn:mime-type property更改为 application/octet-stream

2
Adrian Petrescu

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

2
Paul Dixon

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

0
Frank Wiles