InterMaster.com.ru

Разное и возможно полезное

Как я меняю в проектах концы строк с CRLF на LF

Просмотров: 28169Комментарии: 4
Рубрика: СайтостроительствоМетки:

Иногда бывает такая ситуация – получаешь от заказчика движок для его дальнейшего «допиливания». Пытаешься положить его в репозиторий 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. Так проще и нагляднее.

  1. Кладу все файлы движка в папку – например, Original.
  2. Удаляю всякие временные файлы и прочий мусор.
  3. В пустые папки, которые тем не менее необходимы для работы сайта, кладу файл readme.txt. Это надо по той причине, что Git отслеживает только файлы, а не папки. Поэтому если закоммитить в Git движок с пустыми папками, то потом при выгрузке движка этих пустых, но нужных папок мы не увидим.
  4. Открываю пункт меню «Редактировать» -> «Настройки» и указываю имя пользователя, email и кодировку файлов проекта.
  5. В файлах настроек Git – gitconfig - для параметра core прописываю:
    • autocrlf = input
    • safecrlf = warn

    или выполнить команды:

    • $ git config --global core.autocrlf input
    • $ git config --global core.safecrlf warn

    Первый параметр дает команду Git заменить все окончания строк с CRLF в LF при записи в репозиторий.

    Второй – выдает предупреждения о конвертации специфических бинарников, если вдруг такие окажутся в движке.

  6. Теперь записываю все файлы движка в репозиторий. В итоге в репозитории все файлы будут иметь концы строк LF или CR (т.к. Git сконвертировал только CRLF в LF, преобразование CR->LF от не выполняет).
  7. Запускаю Git GUI, выбираю «Склонировать существующий репозиторий».
  8. В строке «Исходное положение» указываю папку Original.
  9. В строке «Каталог назначения» указываю полный пусть к папке, в которую я хочу скопировать репозиторий из папки Original. В данном случае я указал папку Target. Важно: папки с таким именем на диске быть не должно. Git GUI создаст ее сам.
  10. Выбираю «Полная копия».
  11. Жму «Склонировать».

Клонирование репозитория Git

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

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

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

    Жмем «Найти все»

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

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

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

  1. Сохраняем файл и выполняем аналогичное преобразование для всех оставшихся файлов в формате Mac. В итоге в папке Target мы будем иметь движок, все файлы которого будут иметь конец строк Unix-формата LF.

Теперь движок можно класть в репозиторий Git. И не забудьте в редакторе, которым выпотом будете править файлы, выставить по умолчанию концовку строк LF, чтобы опять не возникла мешанина.

Комментариев: 4 RSS

1 Михаил 12-02-2016 22:30

Такую петлю через git пришлось делать потому что CRLF концов много? Если я правильно понял, во всех файлах можно было сделать «Правка» -> «Формат Конца Строк» -> «Преобразовать в Win-формат»

Admin: да, можно в каждом файле отдельно формат концов строк поменять. Но т.к. файлов очень много, то пока не придумал ничего лучше такого вот "пакетного" изменения сразу во всех файлах.

2 Сергей 28-10-2016 01:42

Спасибо. Долго искал. Изощрённый метод однако

3 Михаил 07-02-2017 14:53

Как раз с данной ошибкой (LF will be replaced by CRLF ) столкнулся, но смотрю что в Нетбинсе "Правка"->"Замена", выбираем что регулярка и пишем с \r\n на \n и оно во всех файлах приведет к линуксовскому виду, ну типа того что вы добились гитом

4 madBR 23-10-2017 12:08

Все тоже самое что и в статье, только проще, в Notepad++

CTRL-F >> 'Найти в файлах'

1. Выбираем 'Режим поиска' >> 'Расширенный'

2. В поле 'Папка' выбираем папку с проектом

3. В поле 'Найти' пишем '\r\n'

4. В поле 'Заменить на' пишем '\n'

5. Жмем 'Заменить в файлах'

6. После замены возвращаемся к шагу #3 и пишем '\r', жмем заменить

7. PROFIT

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Вы можете войти под своим логином или зарегистрироваться на сайте.

Выберите человечка с поднятой рукой!

При нажатии на картинку, Ваш комментарий будет добавлен.