Cygwin: Initial clone of repo containing .gitattributes has modified files
- From
- Raman Gupta <rocketraman@fastmail.fm>
- Date
- Jun 2, 2009, 12:47 UTC
- Message-ID
- <4A251F66.2020809@fastmail.fm>
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