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

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

Чем вы занимаетесь?

Ответ 1

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

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

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

Ответ 2

Сначала нужно очистить все. Вы работаете в 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 Mac OS X. Большинство людей считают, что "родной" лучше всего подходит. Единственная проблема с Native заключается в том, что он не будет проверять файл со смешанными окончаниями строк, в то время как "LF" и "CRLF" будут.

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

Ответ 3

Добавьте pre-commit hook, который анализирует содержимое файла и выполняет настройку CRLF/LF/CR/etc для вас до этого записанный в SVN.

Ответ 4

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