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

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

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

19.08.2008 04:22:34
5 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

32
14.03.2013 16:50:45
Проблема с svn: eol-style = native состоит в том, что он потерпит неудачу, если у вас разные окончания строк.
David W. 15.03.2012 20:15:20
Начиная с SVN 1.8 автоматическое реквизит теперь можно выполнять и на стороне сервера, что может решить эту проблему раз и навсегда. См. Stackoverflow.com/a/25643777/217893 для получения подробной информации
Alastair Maw 3.09.2014 15:38:43

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

2
19.08.2008 04:39:21
Извините, ловушка предварительной фиксации не может изменить файлы в вашем рабочем каталоге. Хук предварительной фиксации запускается на сервере, поэтому он даже не имеет доступа к рабочему каталогу.
David W. 15.03.2012 20:05:59

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

2
19.08.2008 05:43:20

Во-первых, чтобы очистить все. Вы используете 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" будут.

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

6
15.03.2012 20:20:24
Не должно быть места до \; ?
jnr 12.10.2016 12:19:36

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

([^\r])\n

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

$1\r\n

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

*.xml;*.txt;*.csv;...АФС.

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

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

0
10.01.2020 11:05:44