Ответ 1
Утилита file
использует "text/x-shellscript" для сценариев оболочки:
$ file --mime-type /tmp/test.sh
/tmp/test.sh: text/x-shellscript
Когда я добавляю оболочку script (foo.sh) в subversion, по умолчанию она устанавливает svn:mime-type
в application/x-shellscript
. Поскольку это не начинается с text/
, diff и винить по существу игнорируют файл. Я посмотрел официальный список текстовых mime-типов, но не видел ничего похожего на оболочку script.
Есть ли хорошее значение для его установки?
Следуя приведенным ниже советам, я установил тип 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 в том, что это текстовый файл?
Утилита file
использует "text/x-shellscript" для сценариев оболочки:
$ file --mime-type /tmp/test.sh
/tmp/test.sh: text/x-shellscript
Авто-свойства - это полностью клиентская функция. С помощью auto = properties вы также можете определить | переопределить некоторые свойства для добавления в объекты репозитория Subversion (например, для старых добавлений вам необходимо переопределить неправильный тип mime)
В config
файле вашего подрывника (зависящее от платформы местоположение)
[miscellany]
раздел uncomment # enable-auto-props = yes
строка[auto-props]
раскомментировать # *.sh = svn:eol-style=native;svn:executable
и отредактировать (удалите ненужные, добавьте необходимые, например svn:mime-type=text/plain
)После этого все новые *.sh файлы в репо появятся в виде текста /plain.
Но поскольку конфигурация является клиентской, а изменения в ней не заполняются в репо, любой другой клиент Subversion будет продолжать добавлять *.sh файлы в текст /x -shellscript, если ваши изменения не будут повторяться
Subversion редко устанавливает типы mime самостоятельно; либо ваш клиент сделал это сам по себе (в этом случае вы, вероятно, захотите настроить его конфигурацию), или какая-либо форма стандартной обработки автообеспечения svn активна (опять же, вы захотите ее отрегулировать - для сценариев оболочки вы также будете хотите установить svn: eol-style в LF, некоторые оболочки будут закрыты на концах строк DOS/Windows, и, гарантируя, что окончание строк Unix используется повсюду, вы избегаете проблем с использованием файлов через общий сетевой ресурс или некоторые сборки Windows для оболочек (например, Cygwin)).
Проблема с svn виной заключается в том, что свойство имеет версию. Любая ревизия файла до изменения свойства по-прежнему является двоичной (поскольку тип mime не начинается с текста /), поэтому diff (и вины) не будут работать (легко) против этих изменений.
Я думаю, что единственное исправление для этого - заставить администратора изменить репозиторий, чтобы удалить "плохой" тип 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.