fatal lf would be replaced by crlf

Это может быть интересно не только мне

Иногда бывает такая ситуация – получаешь от заказчика движок для его дальнейшего «допиливания». Пытаешься положить его в репозиторий Git – и получаешь кучу варнингов типа:

Это понятно — файлы в исходнике писались/правились до меня разными людьми и на разных операционных системах. Поэтому в файлах наблюдается полная мешанина в вопросе формата окончания строк.

Небольшая справка для тех, кто не в курсе. В разных операционных системах принят разный формат символов, обозначающий перевод строк:

  • Windows —
    или CRLF (код 0D0A)
  • Unix —
    или LF (код 0A)
  • Mac —
    или CR (код 0D).

Такую разносортицу в своем проекте мне держать не хочется, поэтому я предпочитаю перед началом работ приводить все окончания строк к единому виду —
, он же 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 при записи в репозиторий.

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

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

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

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

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

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

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

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

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

    Заметки WEB-программиста на темы php, mysql, курсы веб программирования

    четверг, 16 августа 2012 г.

    Git: fatal: LF would be replaced by CRLF

    Git перестал добавлять файлы в репозиторий, выдавая ошибку:

    Связанно это с тем что переносы строк были в Unix-формате, так как дело происходило под Windows.
    Простые решения:

    1. Очень просто конвертировать переносы строк в Windows-формат помогает текстовый редактор Notepad++: Правка→EOL конверсия→Преобразовать в WIN-формат.
      Подробнее.
    2. Вручную преобразовать символы перевода строки из виндовых в линуксовые, открыть файл, еще раз визуально все проконтролировать и сохранить.
    3. Быстро заменить CRLF на LF можно утилитой dos2unix, входящей в MINGW, с которым поставляется git для win32:

    Если таких файлов много: то самое простое — отключить проверку формата:

    Добавляю в репозиторий файл, git ругается следующим образом:

    fatal: LF would be replaced by CRLF in Web/Scripts/Bootstrap/bootstrap.js

    говорю хорошо не проблема, делаю следующее

    1. Открываю bootstrap.js в Notepad++ ;
    2. Правка=>Формат Конца Строк=>Преобразовать в Win-формат (CRLF);
    3. Сохраняю файл.

    Делаю вновь git add *.js :

    fatal: LF would be replaced by CRLF in Web/Scripts/Bootstrap/bootstrap.js

    git был настроен следующим образом:

    Подскажите, как необходимо настроить git , чтобы избавиться от данной ошибки?

    Источник: computermaker.info

    Техника и Гаджеты
    Добавить комментарий