>> 1) IMO, git should on Windows always do CRLF conversion, as this is what >> Windows developers in general expect. (CRLF text-files that is, not the >> conversion.) Meaning that >> core.autocrlf = Windows > > I do not think so. > > core.autocrlf is only about the relationship between the working tree and > the repository. > > So if you want CR/LF line endings always, just do not set that flag > (which defaults to false). > > If you want LF line endings in the repo, but not necessarily in the > working tree, set core.autocrlf to input. > > If you want LF line endings sometimes, but CR/LF at other times, but do > not care if the revisions in the repository will have LF or CR/LF, do not > set that flag. Ok, here we fundamentally disagree. IMO Windows user expect files to be DOS style, since all other files are. Yes, most newer tools 'handle' Unix style files, but creating new ones will mostly be DOS style. Some will actually wreak havoc on your files, and start adding DOS line endings in the middle of your Unix line ending file. I've seen it happen. So, dealing with Unix style text files on Windows can be a problem for some people. So, normally, when developing on Windows you'd expect DOS files, nothing else. (Note that we're not talking about your average MinGW or Cygwin user here, since they are known to the issues and how to tackle them) > Git is really slowed down tremendously just by the fact that it runs on > Windows. You should not add to that. The auto crlf conversion is not the slow down here, and the time spent there is negligible. I use autocrlf on all my repos on Windows, and don't notice it. Filestat'ing on the other hand.. :-) > IMHO in most cases -- even on Windows -- you do not want to set autocrlf > at all. Because you do not need to store the file different from the > version you have in the working tree. Not true. I believe, especially at the moment, most Git users on Windows are mostly developing code in a cross-platform manner, and therefore care about this problem. > The only situation where I think it makes sense, is when you have both > Windows and Unix developers, _and_ your Windows tools sometimes produce > CR/LF stupidly. But then I'd set it to "input". That's ok _now_, because most of the Git user group is experienced developer that understand the problem. I'm trying to see past that state, and prepare Git for more 'common' usage on Windows. They'd expect text files on Windows to be handled correctly, without any fuzz. No tweaking of config options to make it work on Windows. No problems with sharing repositories with Unix developers. Just work. That's not the current state. But it could be. > BTW no need to fuzz about binary files, which want to be in the > object database without being converted. Our heuristics has so far > been pretty successful in discerning binary from text files. Yeah, I have no beef with the binary detection. It seems to work fine. At least I haven't had a problem with it yet, and it's not what we're discussing. Ok, I come from the Perforce world, so here how it works there: 1) Files are stored with Unix line endings in the repository. 2) Conversion is done on Windows (and older Macs) upon checkout, if the file is a text file. 3) It has binary file detection when you add it to the depot, so if you and to add a DOS line ending file to the repo, you have to mark it as a binary file manually Git does 1) and 2) already, and with the EOL detection in the repo file, (when you've already detected that a file has changed, so there's not much time wasted with that) to eliminate the 'yes' in point 6) in the original mail, should help implement 3) above well enough. It's simply, "If it was a CRLF file before, no need to convert it to LF now", and the problem is largely fixed. Then it's only when we want to commit a new CRLF file that we need a way to 'turning off' the autocrlf for just _that_ file for _that_ commit. And presto, you'd have something which most Windows users would expect. And Git would probably be adapted on Windows more quickly, which this is all about. :-) IMHO. -- .marius
Attachment:
signature.asc
Description: OpenPGP digital signature