Эти сообщения из-за неправильного значения по умолчанию в core.autocrlfWindows.
Концепция 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 (и mac osx).
(pre-osx crне затронут ни для одного из трех вариантов выше)
Когда появляется это предупреждение (под Windows)
- autocrlf= trueесли у вас есть Unix-стиль lfв одном из ваших файлов (= RARELY),
- autocrlf= inputесли у вас есть win-стиль crlfв одном из ваших файлов (= почти ВСЕГДА),
- autocrlf= false- НИКОГДА!
Что означает это предупреждение
Предупреждение « LF будет заменено на CRLF » говорит о том, что вы (имея autocrlf= true) потеряете свой LF в стиле Unix после цикла фиксации (он будет заменен CRLF в стиле Windows). Git не ожидает, что вы будете использовать LF в стиле Unix под Windows.
Предупреждение « 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и
- «локальный» (для репо) gitconfig в .git/configв рабочем каталоге .
Итак, напишите git config core.autocrlfв рабочем каталоге, чтобы проверить текущее используемое значение и
- добавить autocrlf=falseк общесистемному gitconfig # решение для системы
- git config --global core.autocrlf false # решение для пользователя
- git config --local core.autocrlf false # решение для проекта
Предупреждения
- git configнастройки могут быть изменены gitattributesнастройками.
- crlf -> lfпреобразование происходит только при добавлении новых файлов, crlfфайлы, уже существующие в репо, не затрагиваются.
Мораль (для Windows):
- использовать core.autocrlf=, trueесли вы планируете использовать этот проект также под Unix (и не хотите настраивать ваш редактор / IDE для использования концов строк Unix),
- использовать core.autocrlf=, falseесли вы планируете использовать этот проект только под Windows ( или вы настроили свой редактор / IDE для использования концов строк Unix),
- никогда не используйте core.autocrlf=, inputесли у вас нет веских причин ( например, если вы используете утилиты Unix под Windows или если у вас возникают проблемы с makefiles),
PS Что выбрать при установке git для Windows?
Если вы не собираетесь использовать какой-либо из ваших проектов под Unix, не соглашайтесь с первым вариантом по умолчанию. Выберите третий ( Оформить заказ как есть, зафиксировать как есть ). Вы не увидите это сообщение. Когда-либо.
PPS Мое личное предпочтение - настройка редактора / IDE для использования окончаний в стиле Unix и настройка core.autocrlfна false.