Ці повідомлення через неправильне значення за замовчуванням 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.