Эти сообщения из-за неправильного значения по умолчанию в 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 (и 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
.