Как мне сказать Subversion обрабатывать файл как двоичный файл?
Как мне сказать Subversion (svn) обрабатывать файл как двоичный файл?
10 ответов
Можно вручную идентифицировать файл, расположенный в репозитории, как двоичный файл, используя:
svn propset svn:mime-type application/octet-stream <filename>
Как правило, в этом нет необходимости, поскольку Subversion будет пытаться определить, является ли файл двоичным при первом добавлении файла. Если Subversion неправильно помечает определенный тип как "текст", когда его следует рассматривать как двоичный файл, можно настроить функцию автоматического пропуска Subversion для автоматической пометки этого файла нетекстовым MIME-типом. Независимо от свойств, настроенных для файла, Subversion по-прежнему сохраняет файл в двоичном формате в репозитории.
Если Subversion идентифицирует MIME-тип как "текстовый" тип, он включает определенные функции, которые недоступны в двоичных файлах, такие как svn diff и svn blame. Это также позволяет выполнять автоматическое преобразование конца строки, которое настраивается для каждого клиента.
Для получения дополнительной информации см. Как Subversion обрабатывает двоичные файлы?
Со страницы 367 книги Subversion
В самом общем смысле Subversion обрабатывает двоичные файлы более изящно, чем CVS. Поскольку CVS использует RCS, он может хранить только последовательные полные копии изменяющегося двоичного файла. Subversion, тем не менее, выражает различия между файлами с использованием алгоритма двоичного различия, независимо от того, содержат ли они текстовые или двоичные данные. Это означает, что все файлы хранятся по-разному (сжато) в хранилище.
Пользователи CVS должны помечать двоичные файлы флагами -kb, чтобы предотвратить искажение данных (из-за расширения ключевых слов и перевода строк). Они иногда забывают сделать это.
Subversion выбирает более параноидальный маршрут. Во-первых, он никогда не выполняет какой-либо перевод ключевого слова или перевода строки, если вы явно не попросите его сделать это (см. Раздел "Замена ключевых слов" и раздел "Последовательности символов конца строки" для получения более подробной информации). По умолчанию Subversion обрабатывает все данные файла как буквенные байтовые строки, и файлы всегда хранятся в хранилище в непереведенном состоянии.
Во-вторых, Subversion поддерживает внутреннее представление о том, является ли файл "текстовыми" или "двоичными" данными, но это понятие существует только в рабочей копии. Во время обновления svn Subversion будет выполнять контекстное слияние локально измененных текстовых файлов, но не будет пытаться сделать это для двоичных файлов.
Чтобы определить, возможно ли контекстное слияние, Subversion проверяет свойство svn:mime-type. Если файл не имеет свойства svn:mime-type или имеет тип MIME, который является текстовым (например, text/*), Subversion предполагает, что это текст. В противном случае Subversion предполагает, что файл является двоичным. Subversion также помогает пользователям, выполняя алгоритм двоичного обнаружения в командах svn import и svn add. Эти команды сделают правильное предположение, а затем (возможно) установят двоичное свойство svn:mime-type для добавляемого файла. (Если Subversion угадает неправильно, пользователь всегда может удалить или отредактировать свойство вручную.)
Ручное редактирование будет сделано
svn propset svn:mime-type some/type filename.extension
По сути, вы должны установить тип mime для octet-stream:
svn propset svn:mime-type application/octet-stream <filename>
Если 'svn add' угадывает неправильный тип и выдает ошибку вроде следующего:
svn: E200009: File 'qt/examples/dialogs/configdialog/images/config.png' has inconsistent newlines
svn: E135000: Inconsistent line ending style
затем обходной путь - добавить файл без свойств, а затем установить свойства на втором шаге:
svn add --no-auto-props qt/examples/dialogs/configdialog/images/config.png
svn propset svn:mime-type image/png qt/examples/dialogs/configdialog/images/config.png
Хотя Subversion пытается автоматически определить, является ли файл двоичным или нет, вы можете переопределить mime-тип, используя svn propset. Например, svn propset svn:mime-type application/octet-stream example.txt
, Это заставит ваш файл действовать как набор байтов, а не как текстовый файл. Смотрите также руководство svn по переносимости файлов.
Если вы используете Tortoise SVN в Windows, щелкните правой кнопкой мыши на файле и перейдите в свойства. Нажмите на новый и добавьте новое свойство типа svn:mime-type. Для поставленного значения: application/octet-stream
SVN ищет свойство MIME-типа, предполагая, что это текст, если он не существует. Вы можете подробно установить это свойство, см. http://svnbook.red-bean.com/en/1.5/svn.forcvs.binary-and-trans.html
В соответствии с Subversion FAQ вы можете использовать svn propset для изменения свойства svn:mime-type на application/octet-stream
Обычно он делает это по умолчанию для вас, но если это не так, вам нужно посмотреть свойства файла и propset.