当我将shell脚本(foo.sh)添加到subversion时,默认情况下会将svn:mime-type
设置为application/x-shellscript
。由于这不是以text/
开头,因此diff和blame基本上忽略了该文件。我查看了official list of text mime-types,但没有看到任何看起来像shell脚本的内容。
设置它有什么好处吗?
按照以下建议,我将mime-type设置为text / x-shellscript。但是,责备仍然认为它是一个二进制文件。
$ 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它是一个文本文件吗?
答案 0 :(得分:10)
file
实用程序对shell脚本使用`text / x-shellscript':
$ file --mime-type /tmp/test.sh
/tmp/test.sh: text/x-shellscript
答案 1 :(得分:1)
自动属性是完全客户端功能。使用auto =属性,您还可以定义|重新定义一些属性以添加到Subversion存储库对象(即,对于旧的添加,您必须重新定义错误的mime类型)
在您的subversion的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,除非您的更改不重复
答案 2 :(得分:1)
Subversion很少自己设置mime类型;要么你的客户自己做了(在这种情况下你可能想调整它的配置),或某种形式的标准svn自动道具处理是活跃的(再次,你会想要调整它 - 对于shell脚本你也将想要将svn:eol-style设置为LF;有些shell将在DOS / Windows行结尾处进行barf,并且通过确保在任何地方使用Unix行结尾,可以避免通过网络共享或某些Windows shell构建使用文件时出现问题(例如Cygwin))。
svn blame的问题是该属性是版本化的。在属性更改之前对文件的任何修订仍然是二进制的(因为mime类型不以text /开头),因此diff(和blames)将不能(轻松)对这些修订工作。
我认为唯一的修复是让管理员修改存储库以删除“坏”的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。