11

当我将 shell 脚本 (foo.sh) 添加到 subversion 时,默认情况下它将设置svn:mime-typeapplication/x-shellscript. 由于这不是以 , 开头的text/, diff 和 blame 基本上忽略了该文件。我查看了文本 mime 类型的官方列表,但没有看到任何看起来像 shell 脚本的东西。

设置它有很好的价值吗?

更新

按照下面的建议,我将 mime-type 设置为 text/x-shellscript。但是,blame 仍然认为它是一个二进制文件。

$ svn blame file.sh 
Skipping binary file: 'file.sh' 
$ svn proplist file.sh 
Properties on 'file.sh':
  svn:executable
  svn:mime-type 
$ svn propget svn:mime-type file.sh
 text/x-shellscript

我还需要做些什么来说服 subversion 它是一个文本文件吗?

4

3 回答 3

15

file实用程序将 `text/x-shellscript' 用于 shell 脚本:

$ file --mime-type /tmp/test.sh
/tmp/test.sh: text/x-shellscript
于 2013-03-08T20:37:50.213 回答
1

自动属性是完全客户端功能。使用 auto=properties,您还可以定义|重新定义一些属性以添加到 Subversion 存储库对象(即,对于旧添加,您必须重新定义错误的 mime 类型)

config您的颠覆文件中(取决于平台的位置)

  • [miscellany]部分取消注释# enable-auto-props = yes字符串
  • [auto-props]部分取消注释# *.sh = svn:eol-style=native;svn:executable并相应地编辑(删除不需要的,添加需要的喜欢svn:mime-type=text/plain

在此之后 repo 中的所有*.sh 文件将显示为 text/plain。

但是,因为 config 是客户端的,并且其中的更改不会填充到 repo 中,所以任何其他 Subversion 客户端将继续添加 *.sh 文件作为 text/x-shellscript 除非您的更改不重复

于 2013-03-09T14:58:26.377 回答
1

Subversion 很少自己设置 mime 类型。要么是你的客户端自己做的(在这种情况下你可能想要调整它的配置),或者某种形式的标准 svn 自动道具处理是活跃的(同样,你会想要调整它 - 对于 shell 脚本,你也会想要将 svn:eol-style 设置为 LF;一些 shell 会在 DOS/Windows 行结尾处出现问题,并且通过确保在任何地方都使用 Unix 行结尾,您可以避免通过网络共享或某些 Windows 构建的 shell 使用文件时出现问题(例如 Cygwin))。

svn blame 的问题在于该属性是版本化的。在属性更改之前对文件的任何修订仍然是二进制的(因为 mime 类型不以 text/ 开头),因此差异(和责备)将不会(轻松地)针对这些修订起作用。

我认为唯一的解决方法是让管理员修改存储库以删除“坏”mime 类型。

但是,作为一种解决方法,您应该能够通过 --force 责备,告诉它将所有文件视为文本。

事实上,看看http://subversion.1072662.n5.nabble.com/svn-blame-not-working-for-files-which-had-binary-mime-type-in​​-a-previous-revision-td177847 .html,最近的颠覆客户端会告诉你使用 --force。

于 2014-01-06T16:08:22.480 回答