2008-08-19 6 views
24

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

Что вы будете делать?

ответ

32

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

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

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

+2

Проблема с svn: eol-style = native заключается в том, что она завершится неудачно, если у вас есть разные окончания строк. – 2012-03-15 20:15:20

+0

Начиная с SVN 1.8 автоматические реквизиты теперь также могут выполняться на стороне сервера, что может решить эту проблему раз и навсегда. См. Http://stackoverflow.com/a/25643777/217893 для получения более подробной информации – 2014-09-03 15:38:43

2

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

+2

К сожалению, крюк предварительной фиксации не может изменить файлы в вашем рабочем каталоге. Захват предварительной фиксации выполняется на сервере, поэтому он даже не имеет доступа к рабочему каталогу. – 2012-03-15 20:05:59

2

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

6

Прежде всего, нужно очистить все. Вы в Windows или Unix/Linux/Mac?

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

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

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

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

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

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