Ці повідомлення через неправильне значення за замовчуванням core.autocrlf
у Windows.
Концепція autocrlf
полягає в тому, щоб прозоро обробляти конверсії ліній закінчень. І це робить!
Погані новини : значення потрібно налаштувати вручну.
Хороша новина : це потрібно робити лише ОДН раз на встановлення git (можлива також установка проекту).
Як autocrlf
працює :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Тут crlf
= маркер кінця рядка у стилі win, lf
= unix-style (та mac osx).
(pre-osx cr
не впливає на жоден із трьох варіантів, наведених вище)
Коли з’являється це попередження (під Windows)
- autocrlf
= true
якщо ви маєте стиль Unix lf
в одному зі своїх файлів (= РІДНО),
- autocrlf
= input
якщо у вас є стиль win crlf
в одному з ваших файлів (= майже ВЖЕ),
- autocrlf
= false
- НІКОЛИ!
Що означає це попередження
Попередження " LF буде замінено CRLF " говорить, що ви (маючи autocrlf
=true
) втратите свій LF у стилі unix після циклу оформлення замовлення (він буде замінений на CRLF у стилі Windows). Git не сподівається на те, що ви використовуєте LF у стилі unix під вікнами.
Попередження " CRLF буде замінено LF " говорить про те, що ви (маючи autocrlf
= input
) втратите свій CRLF у стилі Windows після циклу оформлення замовлення (його замінить LF у стилі unix). Не використовуйте input
під вікнами.
Ще один спосіб показати, як autocrlf
працює
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
де x або CRLF (у стилі windows), або LF (unix-стиль), і стрілки означають
file to commit -> repository -> checked out file
Як виправити
Значення за замовчуванням core.autocrlf
вибирається під час встановлення git і зберігається в загальносистемній системі gitconfig (%ProgramFiles(x86)%\git\etc\gitconfig
). Також є (каскадні в такому порядку):
- "глобальний" (на користувача) gitconfig, розташований у ~/.gitconfig
, ще інший
- "глобальний" (на кожного користувача) gitconfig у $XDG_CONFIG_HOME/git/config
або $HOME/.config/git/config
та
- "локальний" (per-repo) gitconfig .git/config
у робочому режимі.
Отже, напишіть git config core.autocrlf
у робочий dir, щоб перевірити поточно використане значення та
- додати autocrlf=false
до загальносистемного рішення gitconfig # за системою
- git config --global core.autocrlf false
# рішення на користувача
- git config --local core.autocrlf false
# рішення за проект
Попередження
- git config
налаштування можуть бути замінені gitattributes
налаштуваннями.
- crlf -> lf
перетворення відбувається лише при додаванні нових файлів, crlf
файли, які вже є в репо-репо, не впливають.
Мораль (для Windows):
- use core.autocrlf
= true
якщо ви плануєте використовувати цей проект також під Unix (і не бажаєте конфігурувати редактор / IDE для використання закінчень рядків Unix),
- use core.autocrlf
= false
якщо ви плануєте використовувати цей проект лише під Windows ( або ви налаштували редактор / IDE для використання закінчень рядків Unix),
- ніколи не використовуйте core.autocrlf
=, input
якщо у вас немає вагомих причин ( наприклад, якщо ви використовуєте утиліти unix під Windows або якщо у вас виникли проблеми з makefiles),
PS Що вибрати при установці git для Windows?
Якщо ви не збираєтесь використовувати жоден із своїх проектів під Unix, не погоджуйтесь із першим варіантом за замовчуванням. Виберіть третій ( Оформити замовлення як є, зробити так, як є ). Ви не побачите це повідомлення. Колись.
PPS Мої особисті переваги - налаштування редактора / IDE для використання закінчень у стилі Unix та налаштування core.autocrlf
на false
.