如何明确告诉SVN将文件视为文本而非二进制文件

45

我有一些文件,在没有正确设置它们的MIME类型的情况下就将它们检入了SVN。SVN最初将它们分类为二进制。

后来我通过propset在SVN中设置了它们的MIME类型为"text/plain; charset=UTF-8",并确保所有文件都是UTF-8编码。但是当我运行'svn blame filename'时,SVN仍然说该文件是二进制的,没有给出明确的blame-type输出。

您有什么建议可以让SVN确信这些文件真正是文本文件吗?


propget函数会返回正确的MIME类型吗? - Adam Peck
感谢您的互动!是的,propget确实返回正确的类型。我刚刚执行了以下命令:svn propget svn:mime-type 文件名输出结果为: text/plain; charset=UTF-8 - DWright
https://dev59.com/T3VD5IYBdhLWcg3wI4CM 有相同的想法,但是是反过来的。其中的引用仍然与您的查询相关。 - Eddie Parker
是的,我尝试过反向操作,将属性设置为text/plain。似乎没有起作用。 - DWright
1
@DWright,只是确认一下,svn-propset会更改本地工作副本中的类型,并且需要进行svn提交才能更改存储库中的类型。两种类型都需要匹配并且可以进行“diff-able”操作,以便svn diff / svn blame能够正常工作。 - Fox
4个回答

62

将svn:mime-type属性设置为"text/plain"就能起到帮助作用:

svn propset svn:mime-type text/plain build.xml
svn commit build.xml

此外,你可以强制Subversion在责备(blaming)文件时将其视为文本文件:

svn blame file/to/blame --force

1
谢谢。--force标志做了我需要的事情。我也尝试只使用"text/plain",但那并没有改变它。 - DWright
7
给未来的读者: svn propset svn:mime-type text/plain build.xml - david van brink
使用find . -name *.proto | xargs svn propset svn:mime-type text/plain将所有的proto文件标记为纯文本文件: - DawnSong
2
全局设置:编辑 ~/.subversion/config,在文件的 [auto-props] 部分中添加 *.proto = svn:mime-type=text/plain 作为单独的一行。 - DawnSong

5

我也遇到了同样的问题:我上传了一些utf8编码的文件(Linux的本地编码),其中有一些被错误地识别为二进制文件并标记为“(bin)”。我没有深入研究这个错误是如何发生的,而是检查了这些文件的内容...

$ svn propget svn:mime-type *

请注意,正确签入的文本文件根本没有svn:mime属性,并且仅会从错误标记为二进制的文本文件中删除svn:mime-type属性。

$ svn propdel svn:mime-type [mislabeled-text-file...]
$ svn ci -m "zap binary mime-types" [mislabeled-text-file...]

这似乎没有产生任何负面影响。注意:我不知道Windows在这种情况下会如何表现,但这很容易测试。


0

看起来对MIME类型的操作并不能让svn将文件视为文本。但是,如果在第一次提交之前设置了正确的MIME类型,则svn会正确地处理该文件。例如,svn将eclipse .project和.classpath添加为application/xml,并将它们视为二进制文件。但是,如果在第一次提交之前将其更改为text/xml,则它们将被视为文本。


0

在将文件添加到存储库后,您可能还需要设置 REPOSITORY 上的类型。在 propset 命令中使用存储库的 URL 而不是工作副本的路径。


2
这是错误的(或者不够清晰以至于是错误的)。当您提交它们时,Subversion属性会像任何其他文件更改一样提交到存储库中。 - yam655

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接