Как я могу преобразовать все окончания строки в CRLF, LF или CR во время операций SVN - PullRequest
24 голосов
/ 19 августа 2008

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

Что ты делаешь?

Ответы [ 4 ]

32 голосов
/ 19 августа 2008

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

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

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

6 голосов
/ 16 марта 2012

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

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

2 голосов
/ 19 августа 2008

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

2 голосов
/ 19 августа 2008

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

...