Правильный MIME-тип сценариев оболочки в subversion

Когда я добавляю сценарий оболочки (foo.sh) в subversion, по умолчанию он устанавливает svn:mime-type в application/x-shellscript. Так как это не начинается с text/, diff и вину по существу игнорируют файл. Я просмотрел официальный список текстовых MIME-типов, но не увидел ничего похожего на сценарий оболочки. .

Есть ли хорошее значение для его установки?

Обновлять

Следуя приведенному ниже совету, я установил для типа mime значение 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 в том, что это текстовый файл?


person Troy Daniels    schedule 08.03.2013    source источник


Ответы (3)


Утилита file использует `text/x-shellscript' для сценариев оболочки:

$ file --mime-type /tmp/test.sh
/tmp/test.sh: text/x-shellscript
person nosid    schedule 08.03.2013
comment
Полезно, но просто для уточнения: будет ли возвращен text/x-shellscript, полностью зависит от строки shebang рассматриваемого файла, а не от суффикса имени файла (.sh), если он есть. Вкратце: строка shebang должна быть #!/bin/(sh|bash|csh|tcsh|ksh|zsh) (выражена в виде регулярного выражения, не уверена, что их больше); обратите внимание, что строка shebang на основе #!/usr/bin/env не распознается. Если эти условия не выполняются и файл является текстовым, возвращается text/plain. - person mklement0; 29.09.2015

Автосвойства — это полностью клиентская функция. С помощью auto=properties вы также можете определить|переопределить некоторые свойства для объектов, добавленных в репозиторий Subversion (т. е. для старых добавлений вы должны переопределить неправильный MIME-тип)

В config файле вашей подрывной деятельности (зависит от платформы)

  • в разделе [miscellany] раскомментируйте # enable-auto-props = yes строку
  • в разделе [auto-props] раскомментируйте # *.sh = svn:eol-style=native;svn:executable и отредактируйте соответствующим образом (удалите ненужное, добавьте необходимое, например svn:mime-type=text/plain)

После этого все новые файлы *.sh в репозитории будут отображаться как текстовые/обычные.

Но, поскольку конфигурация находится на стороне клиента, и изменения в ней не заносятся в репозиторий, любой другой клиент Subversion будет продолжать добавлять файлы *.sh как text/x-shellscript, если только ваши изменения не повторяются.

person Lazy Badger    schedule 09.03.2013

Subversion редко устанавливает типы пантомимы сама по себе; либо ваш клиент сделал это сам (в этом случае вы, вероятно, захотите настроить его конфигурацию), либо активна некоторая форма стандартной обработки svn auto-props (опять же, вы захотите настроить ее - для сценариев оболочки вы также хотите установить svn:eol-style в LF; некоторые оболочки будут ругаться на окончания строк DOS/Windows, и, обеспечив повсеместное использование окончаний строк Unix, вы избежите проблем с использованием файлов через сетевой ресурс или некоторые сборки оболочек Windows (например, Cygwin)).

Проблема с виной svn заключается в том, что свойство имеет версию. Любая версия файла до изменения свойства по-прежнему является двоичной (поскольку MIME-тип не начинается с text/), поэтому различия (и вины) не будут работать (легко) против этих версий.

Я думаю, что единственное исправление для этого — заставить администратора изменить репозиторий, чтобы удалить «плохой» MIME-тип.

Однако в качестве обходного пути вы должны иметь возможность передать --force виноват, чтобы указать ему обрабатывать все файлы как текст.

На самом деле, глядя на http://subversion.1072662.n5.nabble.com/svn-blame-not-working-for-files-what-had-binary-mime-type-in-a-предыдущая-редакция-td177847.html недавние клиенты Subversion предложат вам использовать --force.

person Zastai    schedule 06.01.2014