On Thu, Aug 08, 2019 at 11:08:14PM +0000, Yagnatinsky, Mark wrote:
> Okay, my attempt at better wording for the docs is not going well, because it 
> turns I that I still don't understand the behavior here!
> I thought that "input" means that CRLF will become LF on "git add" but that 
> seems to be true only sometimes.
> For instance, consider the following 11-line shell script:
> mkdir empty
> cd empty
> git init
> git config core.autocrlf false
> echo -e '1\r\n2' > test.txt
> git add .
> git commit -m test
> git config core.autocrlf input
> cp test.txt t2.txt
> echo 'a\r\nb' > test.txt
> git add .
> The output from the last git add is:
> warning: CRLF will be replaced by LF in t2.txt.
> The file will have its original line endings in your working directory.
> Which is a very good warning indeed, but why does it only apply to the new 
> file t2.txt?
> Why does the existing file test.txt retain its CRLF line endings.
Because there are no CRLF ;-)

This line
echo 'a\r\nb' > test.txt
should probably be written as
echo -e 'a\r\nb' > test.txt
or better
printf 'a\r\nb' > test.txt

> I am so confused.
Please run

od -c test.txt
and may be
git ls-files --eol

> Any pointers?


What happens if you run the following:
mkdir empty
cd empty
git init
echo "* -text" >.gitattributes
printf '1\r\n2' > test.txt
git add .
git commit -m "Add test.txt with CRLF"

echo "* text=auto eol=lf" >.gitattributes
cp test.txt t2.txt
printf 'a\r\nb' > test.txt
git add .

git commit -m "cp text.txt t2.txt; change test.txt; eol=input"

git add --renormailze test.txt
git commit -m "Normalize line endings in text.txt"

Reply via email to