Subject: Re: [PATCH 3/3] Teach "git branch" about --new-workdir

From: Marius Storm-Olsen <[email-masked]>
Date: Tue, 24 Jul 2007 21:36:06 +0200

>> 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