Как преобразовать все окончания строк в CRLF, LF или CR во время операций SVN

Итак, вы все готовы сделать большой SVN-коммит, и он взорвется, потому что у вас есть несогласованные окончания строк в некоторых ваших файлах. Интересно то, что вы смотрите на тысячи файлов, охватывающих десятки папок разной глубины.

Что вы делаете?

Ответов (5)

Решение

Я не думаю, что ловушка предварительной фиксации может действительно изменить фиксируемые данные - она ​​может запретить фиксацию, но я не думаю, что она может сделать преобразование за вас.

Похоже, вы хотите, чтобы для свойства svn: eol-style было установлено значение «native» - это автоматически преобразует символы новой строки во все, что используется на вашей платформе (используйте «CRLF», «CR» или «LF», чтобы получить их независимо от чего хочет ОС).

Вы можете использовать автоматические свойства, чтобы все будущие файлы, которые вы создаете, будут иметь это свойство (автоматические свойства обрабатываются на стороне клиента, поэтому вам придется настроить это для каждого пользователя).

Добавьте ловушку перед фиксацией, которая анализирует содержимое файла и выполняет за вас изменение CRLF / LF / CR / и т. Д. Перед записью в SVN.

Вы можете использовать для преобразования такую ​​команду, как Linux dos2unix . Поскольку это команда Linux, ее легко использовать в пакетном режиме со сценариями и т. Д. Я не знаю, есть ли аналог для других операционных систем.

Во-первых, нужно все очистить. Вы используете Windows или Unix / Linux / Mac?

Если вы используете Unix / Linux / Mac, вы можете попробовать что-то вроде этого:

$ find . -type f -name "*.java" -exec dos2unix {}\;

Это если у вас есть dos2unix на коробке. Его нет на моем Mac или какой-либо из шести машин Linux, которые у нас есть. Похоже, мы не устанавливали этот конкретный пакет. К счастью, найти его достаточно легко.

Будьте осторожны при его использовании, потому что вы не хотите изменять двоичные файлы.

После того, как вы все очистили, вы должны поместить svn:eol-style свойство в свои файлы. Установка его на native приведет к извлечению файла с правильным окончанием строки для вашей машины, но сохранит их в формате окончания строки Unix. Остальные три варианта: «LF» для Unix, «CRLF» для Windows и «CR» для компьютеров Mac до Mac OS X. Большинство людей считают, что «родные» лучше всего работают. Единственная проблема с Native заключается в том, что он не регистрирует файл со смешанными окончаниями строк, в то время как LF и CRLF будут.

Как только вы это сделаете, вы должны получить ловушку перед фиксацией , которая позволит вам принудительно вводить окончания строк в определенных файлах. Затем научите своих разработчиков использовать автосвойства . Хук предварительной фиксации предотвратит любые фиксации, если свойство не помещено в файл. Разработчик получает свою фиксацию один или два раза, и они настраивают автоматические свойства самостоятельно.

вы можете использовать notepad ++ для пакетного преобразования окончаний строк. Сделать поиск по регулярному выражению:

([^\r])\n

и замените его на

$1\r\n

Затем вам следует выбрать несколько тестовых файлов, например:

*.xml;*.txt;*.csv;... asf.

это позволяет избежать случайного изменения двоичных файлов

ПРИМЕЧАНИЕ : шаблоны регулярных выражений пропускают пустые строки, поэтому вам нужно запустить второе задание \n\n замены и заменить его на \n\r\n