Cygwin: Initial clone of repo containing .gitattributes has modified files
When a repository containing a .gitattributes file, which contains other files with -crlf set is cloned on cygwin, with autocrlf = true, the initial checkout of the working copy sets the line endings for the -crlf files incorrectly (it ignores the .gitattributes, presumably because it hasn't been checked out yet).
After the checkout has been done, git does correctly mark the files with -crlf as "modified" and a simple reset --hard fixes it, but this is very confusing for the user as the user has not done anything -- it is git itself that has "modified" the file by not assigning the correct line endings.
Reproduction recipe (on a cygwin binmode mount):
---------------------------------------------------
$ git --version git version 1.6.1.2 $ git config --global core.autocrlf true $ git config --global core.safecrlf true $ mkdir temp.git; cd temp.git; git init $ cat | unix2dos > file_dos DOS line endings ^D $ cat > file_unix UNIX line endings ^D $ cat > .gitattributes .gitattributes -crlf file_unix -crlf ^D $ git add .gitattributes * $ git commit -m "Test" $ cd .. $ git clone temp.git tempclone.git $ cd tempclone.git $ git status ... # modified: .gitattributes # modified: file_unix ... ---------------------------------------------------
Also, in a related issue, git on cygwin requires .gitattributes itself to be included in .gitattributes, otherwise with safecrlf = true you get:
$ git add .gitattributes fatal: LF would be replaced by CRLF in .gitattributes
(since .gitattributes created with a cygwin editor on a binmode mount uses unix line endings)
Cheers,
Raman Gupta
Quoted 5 lines · Raman Gupta
When a repository containing a .gitattributes file, which contains other files with -crlf set is cloned on cygwin, with autocrlf = true, the initial checkout of the working copy sets the line endings for the -crlf files incorrectly (it ignores the .gitattributes, presumably because it hasn't been checked out yet).
I think this is what v1.6.3-rc0~83^2~1 (Read attributes from the index that is being checked out, 2009-03-13) was about.
I see you are using a version based on 1.6.1.2; isn't there a newer Cygwin packaged one available?
Quoted 10 lines · Junio C Hamano
Quoted 5 lines · Raman Gupta
When a repository containing a .gitattributes file, which contains other files with -crlf set is cloned on cygwin, with autocrlf = true, the initial checkout of the working copy sets the line endings for the -crlf files incorrectly (it ignores the .gitattributes, presumably because it hasn't been checked out yet).
I think this is what v1.6.3-rc0~83^2~1 (Read attributes from the index that is being checked out, 2009-03-13) was about.
Thanks! I looked for the fix but didn't find any reference to it. Sorry.
Quoted 1 line
I see you are using
Actually, I use Linux -- its my coworkers that use cygwin! Bleh! :)
Quoted 2 lines
a version based on 1.6.1.2; isn't there a newer Cygwin packaged one available?
Nope. That is the latest available as of this morning (at least in the cygwin non-experimental branch).
Cheers,
Raman