Make. Build. Break. Reflect.
912 subscribers
115 photos
1 video
119 links
Полезные советы, всратые истории, странные шутки и заметки на полях от @kruchkov_alexandr
Download Telegram
#git #eol #lf #crlf

Так, пора раз и навсегда закрыть тему с EOL.

Проблема: сохранил редактируемый файл(конфиг/ридми/ямл/докерфайл - да любой текстовый файл) с CRLF = уронил всё, что зависит от этого файла.
Дальше первой строчки никто его не прочитает.
Криво скопировал ответ нейронки из браузера и вставил в файл не посмотрев на EOL - тоже будут ошибки.
Написал скрипт bash - command not found.
Налепил Dockerfile - после первого слоя ничего не будет, плюс ошибка.

Визуально файл такой же, но по факту ничего не работает.
Пора что-то менять.

Проблема с EOL(End of Line) в подавляющем большинстве случаев попадётся всем инженерам, от начинающих сладких пирожочков до самоуверенных синёров-помидоров, кто работает с Windows операционной системой и может не знать/забыть про такие базовые особенности.

Конец строки EOL в операционных системах Linux и Windows обозначается разными символами, что связано с историческими особенностями их развития:
- Linux/Unix: Используется символ перевода строки - LF (Line Feed, \n).
Это стандарт для Unix-систем, включая Linux и macOS.
- Windows: Используется комбинация двух символов - CRLF (Carriage Return + Line Feed, \r\n).
Это стандарт говна, который тебе не нужен.

Тебе почти всегда надо LF.
Для консольных утилит, для CI/CD, для git файлов, для всего.

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

1) Автоматизация в IDE (на примере VSCode)
Зайти в параметры, в поиске ввести EOL, выбрать в выпадающем меню \n
Теперь по дефолту все файлы будут сохраняться в LF EOL.
Ну или добавь "files.eol": "\n" в settings.json

2) Автоматизация в GIT.
В глобальный(ну не для каждого же репозитория же добавлять)
git config --global core.autocrlf false

Эта штука отключает автоматическое преобразование концов строк (CRLF <<->> LF), чтобы Git не вмешивался в формат строк при коммитах или checkout.
git config --global core.eol lf

Устанавливает LF (\n) как стандартный формат конца строки для всех новых файлов в репозиториях.
То есть даже если у тебя слетит настройка в IDE - всё равно гит сохранит как надо для новых файлов.

3) Автоматизация с pre-commit
Во все репозитории добавляй пре-коммит хук в свой файл .pre-commit-config.yaml
---
repos:
....
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
...
- id: end-of-file-fixer
....


4) Себе попу прикрыл - прикрой и коллегам.
В корне репозиториев, в которых работаешь с командой, добавь/измени файл с именем .gitattributes
Внутри
* text=auto eol=lf

Так же добавь в файл .editorconfig в корне репозитория
root = true
[*]
end_of_line = lf


5) Не веришь автоматизации/нет под рукой IDE/файлы не в гите/временно работаешь по SSH на ремоут сервере - проверяй все файл(ы) и принудительно конвертируй файл(ы) при помощи CLI утилиты.
sudo apt install dos2unix

Примеры использования
dos2unix filename.txt
dos2unix *.txt
dos2unix -r directory/
find . -type f -name "*.sh" -exec dos2unix {} \;



За окном 2025 год.
Не совершай элементарных и детских ошибок.
Всё придумали до нас.
Не нужен тебе CRLF.
🔥208👍7