Skip to content

Unix vs Windows Line Ends

nin-jin edited this page Dec 1, 2020 · 3 revisions

Unix завершители строк

  • Один символ LF.
  • На данный момент понимается всеми инструментами во всех системах как завершение строки.
  • С клавиатуры по enter вводится именно этот символ во всех системах.
  • Используется во всех UNIX-подобных системах.
  • GIT хранит текстовые файлы именно в этом формате.

Windows завершители строк

  • Пара символов CR+LF.
  • Появился как компромисс между системами (ныне доминирующими в IT) понимающими LF и системами (ныне не актуальными) понимающими CR.
  • По историческим причинам используется по умолчанию в Windows системах.
  • Инструменты, не понимающие CR приклеивают его к концу строки при разбиении на строки, что даёт неожидаемые результаты.
  • Требуется постоянная конвертация в одиночный LF и обратно в разных местах использования.
  • Конвертация в CR+LF делает файл бинарно не идентичным, что даёт разные хеш суммы.

Решение

CR+LF - устаревший костыль, не несущий в настоящее время никакой пользы, но создающий множество проблем. Поэтому используется наиболее простой и однозначный LF формат.

Для Windows систем MAM предоставляет editorconfig форсирующий использование LF редактором, даже для новых файлов, а так же gitattributes предотвращающий лишние конвертации.