Re: [PATCH] Respect crlf attribute even if core.autocrlf has not been set
From: Steffen Prohaska <hidden>
Date: 2016-06-15 22:45:05
On Jul 30, 2008, at 8:33 PM, Avery Pennarun wrote:
On 7/30/08, Steffen Prohaska [off-list ref] wrote:quoted
What matters is that git gives you exactly back what you committed. It does so with core.autocrlf=true, unless you check out with a different setting for autocrlf.You can tell that this statement isn't quite true because if you have a file with mixed LF and CRLF line endings, which I do (thanks, Windows!) then CRLF->LF conversion is not a reversible operation. Interestingly LF->CRLF still is (because an LF->CRLF'd file will never have a bare LF, and on such a subset of files, CRLF->LF is reversible). Also note that core.autocrlf=input is *definitely* not a perfectly reversible operation.
You are absolutely right. The files your describe are modified by git, because they are "invalid" text files, as git defines them. For git's autocrlf mechanism to work, a text file is only allowed to have a *single* type of line endings. Otherwise it is broken and git tries to help you fixing it.
And so here's the problem: svn hands you a file. It may or may not have CRLFs in it, and the line endings may actually be a random mix of LF and CRLF, as I am actually experiencing at the moment in a particular repository at work. If core.autocrlf is anything other than "false", git will modify the file, and git-svn won't be apply the diff on the next revision.
This sound like a specific problem with svn, not a general problem of git's autocrlf concept. I work with a git-only workflow and I never see the problems you describe.
It's conceivable that core.autocrlf=true will work if your svn repository is pure and svn hands you files only with CRLF endings. It's somewhat unlikely that most svn repositories are in that state (remember: it has to be perfect in *every revision* for git-svn to work). So anyway, I can't see how git-svn can possibly work in the general case if core.autocrlf is anything other than false *at git-svn fetch time*.
That might be the case. Note though that I cannot contribute much to this discussion because I never use git-svn.
And that's what I do, and it works great, modulo a bunch of stupid CRLFs that sneak into the repo via svn, but those can be fixed. Someday we'll stop using svn, and git-filter-branch can fix them all retroactively so that "blame" will work right. Perhaps git-svn needs to actually ignore the core.autocrlf setting?
From what you describe, I get the impression that git-svn's handling of line endings could certainly be improved. Steffen