Как я меняю в проектах концы строк с CRLF на LF
Иногда бывает такая ситуация – получаешь от заказчика движок для его дальнейшего «допиливания». Пытаешься положить его в репозиторий Git – и получаешь кучу варнингов типа:
LF will be replaced by CRLF in index.php
Это понятно — файлы в исходнике писались/правились до меня разными людьми и на разных операционных системах. Поэтому в файлах наблюдается полная мешанина в вопросе формата окончания строк.
Небольшая справка для тех, кто не в курсе. В разных операционных системах принят разный формат символов, обозначающий перевод строк:
- Windows — \r\n или CRLF (код 0D0A)
- Unix — \n или LF (код 0A)
- Mac — \r или CR (код 0D).
Такую разносортицу в своем проекте мне держать не хочется, поэтому я предпочитаю перед началом работ приводить все окончания строк к единому виду — \n, он же LF. Почему так? Большинство серверов работают под управлением систем на базе Unix, поэтому, на мой взгляд, логично использовать nix’овые окончания строк и для файлов движка сайта.
Теперь опишу свой способ приведения конца строк к единому виду. Описывать работу буду на примере графической оболочки Git – Git GUI. Так проще и нагляднее.
- Кладу все файлы движка в папку – например, Original.
- Удаляю всякие временные файлы и прочий мусор.
- В пустые папки, которые тем не менее необходимы для работы сайта, кладу файл readme.txt. Это надо по той причине, что Git отслеживает только файлы, а не папки. Поэтому если закоммитить в Git движок с пустыми папками, то потом при выгрузке движка этих пустых, но нужных папок мы не увидим.
- Открываю пункт меню «Редактировать» -> «Настройки» и указываю имя пользователя, email и кодировку файлов проекта.
- В файлах настроек Git – gitconfig — для параметра core прописываю:
- autocrlf = input
- safecrlf = warn
или выполнить команды:
- $ git config —global core.autocrlf input
- $ git config —global core.safecrlf warn
Первый параметр дает команду Git заменить все окончания строк с CRLF в LF при записи в репозиторий.

- В результате этой манипуляции у нас на диске C появилась папка Target, в которой лежат файлы из репозитория папки Original. Т.е. в папке Target все концы строк приведены к формату LF или CR.
- Заходим в папку Target, видим в ней папку .git – удаляем эту папку.

- Открываем редактор Notepad++, выбираем пункт меню «Вид» -> «Отображение символов» -> отмечаем «Отображать символ Конец строки». Теперь редактор будет нам показывать символы конца строк.

- Выбираем пункт меню «Поиск» -> «Искать в файлах». В настройках поиска выбираем:
- Режим поиска – Расширенный
- Папка – C:\Target
- Найти — \r

- В итоге мы найдем все файлы, которые имеют концы строк в формате Mac, т.е.\r или CR. Вряд ли их будет много, но иногда встречаются. Открываем каждый файл по очереди в том же редакторе Notepad++. Мы сможем визуально увидеть, что у файла концы строк в формате Mac:

- Преобразуем его в Unix формат. Выбираем «Правка» -> «Формат Конца Строк» -> «Преобразовать в UNIX-формат»

- В итоге файл преобразуется в UNIX-формат.

- Сохраняем файл и выполняем аналогичное преобразование для всех оставшихся файлов в формате Mac. В итоге в папке Target мы будем иметь движок, все файлы которого будут иметь конец строк Unix-формата LF.
Теперь движок можно класть в репозиторий Git. И не забудьте в редакторе, которым выпотом будете править файлы, выставить по умолчанию концовку строк LF, чтобы опять не возникла мешанина.
Еще записи по теме
- Как сделать скриншот сайта
- Как изменить порядок вывода записей в MaxSite CMS
- Как сделать панель вкладок на сайте
- Древовидные комментарии в WordPress
- Логирование POST и GET запросов на сайте
/.mso-page-only—>
Такую петлю через git пришлось делать потому что CRLF концов много? Если я правильно понял, во всех файлах можно было сделать «Правка» -> «Формат Конца Строк» -> «Преобразовать в Win-формат»
Admin: да, можно в каждом файле отдельно формат концов строк поменять. Но т.к. файлов очень много, то пока не придумал ничего лучше такого вот «пакетного» изменения сразу во всех файлах.
Спасибо. Долго искал. Изощрённый метод однако
Как раз с данной ошибкой (LF will be replaced by CRLF ) столкнулся, но смотрю что в Нетбинсе «Правка»->»Замена», выбираем что регулярка и пишем с \r\n на \n и оно во всех файлах приведет к линуксовскому виду, ну типа того что вы добились гитом
Все тоже самое что и в статье, только проще, в Notepad++
CTRL-F >> ‘Найти в файлах’
1. Выбираем ‘Режим поиска’ >> ‘Расширенный’
2. В поле ‘Папка’ выбираем папку с проектом
3. В поле ‘Найти’ пишем ‘\r\n’
4. В поле ‘Заменить на’ пишем ‘\n’
5. Жмем ‘Заменить в файлах’
6. После замены возвращаемся к шагу #3 и пишем ‘\r’, жмем заменить
Замена CRLF на LF
Столкнулись с такой проблемой, что часть команды сидит на никсах, часть на винде, часть на маках. Репозиторий соответственно вперемешку crlf с lf. Можно ли каким-то образом привести все файлы в репозитории к одному виду, LF и как сделать так, чтобы человек писал в иде в удобной ему системе переносов, но файл коммитился все равно преобразуясь в LF. Пытался делать по мануалу гитхаба, однако результат нулевой. Как были CRLF файлы, так и остались.
- Вопрос задан более трёх лет назад
- 8078 просмотров
Как заменить crlf на lf
Нужно создать текстовый документ где перевод строки символ LF.
Пробовал Символы.ПС и Символ(10) записывает CRLF. Кодировка.ANSI.
Как?
Хочешь, продам СП?
Чёт я не верю.
Тип: Строка.
Задается строка, являющаяся разделителем строк, к которой при записи файла будет преобразован символ ПС. Если строка пустая, то разделители строк при записи не конвертируются.
Допустимые варианты разделителей строк:
ВК;
ПС;
ВК + ПС (значение по умолчанию — может не указываться).
При использовании других строк в качестве разделителей будет вызвано исключение.
Значение по умолчанию: ВК + ПС.
Как заменить crlf на lf
Регистрация: 06.01.2008
Сообщений: 8
Заменить CR/LF на LF или что происходит с файлом.
Есть файл из UNIX системы, в нём содержится МАС адрес, в исходном состоянии файл имеет размер 18байт, но после простой манипуляции через StringList на выходе получаем 19байт. Что происходит?
var SL1:TStringList; begin SL1:= TStringList.Create; SL1.LoadFromFile('macid'); SL1.SaveToFile('macid'); SL1.Free; end;
Дописывается «возврат каретки» (CR) или 0x0D или #13(кому как нравится), а в исходном файле в конце строки только «подача на строку» (LF) или 0x0A или #10. Выглядит это так
41 41 3A 42 42 3A 43 43 3A 44 44 3A 45 45 3A 46 46 0D 0A
помогите избавиться от 0D.
использую RAD Studio 10.3