These messages are due to an incorrect default value of core.autocrlf on Windows.
The concept of autocrlf is to handle line endings conversions transparently. And it does!
Bad news: the value needs to be configured manually.
Good news: it should only be done one time per Git installation (per project setting is also possible).
How autocrlf works:
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repository repository repository
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Here crlf = win-style end-of-line marker, lf = unix-style (also used on Mac since Mac OS X).
(pre-osx cr is not affected for any of three options above.)
When does this warning show up (under Windows)?
– `autocrlf` = `true` if you have unix-style `lf` in one of your files (= RARELY),
– `autocrlf` = `input` if you have win-style `crlf` in one of your files (= almost ALWAYS),
– `autocrlf` = `false` – NEVER!
What does this warning mean?
The warning “LF will be replaced by CRLF” says that you (having autocrlf=true) will lose your unix-style LF after commit-checkout cycle (it will be replaced by windows-style CRLF). Git doesn’t expect you to use unix-style LF under Windows.
The warning “CRLF will be replaced by LF” says that you (having autocrlf=input) will lose your windows-style CRLF after a commit-checkout cycle (it will be replaced by unix-style LF). Don’t use input under Windows.
Yet another way to show how autocrlf works
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
where x is either CRLF (windows-style) or LF (unix-style) and arrows stand for
file to commit -> repository -> checked out file
How to fix
The default value for core.autocrlf is selected during Git installation and stored in system-wide gitconfig (\Program Files\Git\etc\gitconfig on Windows, /etc/gitconfig on Linux). Also there are (cascading in the following order):
– “global” (per-user) gitconfig located at ~/.gitconfig, yet another
– “global” (per-user) gitconfig at $XDG_CONFIG_HOME/git/config or $HOME/.config/git/config and
– “local” (per-repo) gitconfig at .git/config in the working directory.
So, write git config core.autocrlf in the working directory to check the currently used value and
– git config --system core.autocrlf false # per-system solution
– git config --global core.autocrlf false # per-user solution
– git config --local core.autocrlf false # per-project solution