Re: CRLF problems with Git on Win32
- From
Steffen Prohaska <prohaska@zib.de>
- Date
- Jan 8, 2008, 19:59 UTC
- Message-ID
- <E8DD3CE1-F59A-457F-B6D4-23DF7AEAF962@zib.de>
- In-Reply-To
- <20080108190952.GK22155@fieldses.org>
On Jan 8, 2008, at 8:09 PM, J. Bruce Fields wrote:
Show 39 quoted lines
> On Tue, Jan 08, 2008 at 07:58:57PM +0100, Steffen Prohaska wrote: >> >> On Jan 8, 2008, at 7:07 PM, Junio C Hamano wrote: >> >>> >>> >>> Steffen Prohaska <prohaska-wjoc1KHpMeg@public.gmane.org> writes: >>> >>>> msysgit installs plain git. core.autocrlf is unset. Whatever >>>> plain >>>> git's default is, this is msysgit's default, too. >>> >>> That sounds like a mistake if you are installing a port to a >>> platform whose native line ending convention is different from >>> where plain git natively runs on (i.e. UNIX). >> >> We failed to agree on a better default and as the lengthy >> discussion documents, the best default isn't obvious. >> >> I don't think a solution will be found by declaring one platform >> native (UNIX) and all other platform non-native. The question to >> answer is how to support cross-platform projects. A valid >> solution should never corrupt data unless the user explicitly >> told git to do so. > > My only suggestion is that we consider allowing the user that > "explicitly told git to do so" be the project maintainer. So if you > > echo * autodetectcrlf >.gitattributes > git add .gitattributes > git commit > > then users that clone your repo will get that default without > having to > be told to do something magic on clone. > > (And ideally I'd've hoped you could do that using the existing crlf > attribute rather than having to invent something new, but maybe that > doesn't work.)
I like this idea.
I think we need the following:
- if "autodetectcrlf" is set, git should guarantee that files in
the repository will always have LF-only. Otherwise the automatic
conversion can't work.
- git needs to support a way to select the preferred type of
line endings based on the OS. Unix users want to see LF,
while Windows users want to see CRLF for the same file.And we could implement it as follows:
- We add a configuration variable that sets the preferred
autocrlf conversion, for example core.defaultautocrlf.
- We add a new string value "defaultauto" for crlf in .gitattributes.
crlf=defaultauto is similar to setting crlf to "Unspecified", but
also forces git to act as if core.autocrlf is set to
$(core.defaultautocrlf). That means if the content looks like text
it will be converted according to the local settings.
- On Unix, core.defaultautocrlf defaults to "input".
- On Windows, core.defaultautocrlf defaults to "crlf".This added layer of indirection gives us what we need: The file .gitattributes tells git to convert line endings; but the details of the conversion depend on the environment (OS or configuration).
Steffen