git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: What's cooking extra

From
Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
Date
May 24, 2010, 21:11 UTC
Message-ID
<986EE696-5997-40AD-929C-D82D40D7242E@gmail.com>
In-Reply-To
<20100524094905.GA10811@localhost>
On 24. mai 2010, at 11.49, Clemens Buchacher wrote:
Show 13 quoted lines
> With CRLF file in the repository, core.autocrlf=true and
> core.eol=lf, I tested the patches currently in pu (0ed6711a) in the
> following three scenarios:
> 
> 1. no attributes are set
> 2. text attribute is set or auto
> 3. eol attribute is set to lf
> 
> In the first scenario, the behavior is completely asymmetric. LF
> files will be converted to CRLF, if core.eol=crlf, but CRLF files
> will _not_ be converted to LF, even if core.eol=lf. And it will not
> be marked as dirty either. Yet this is the default behavior in
> terms of attributes.
Default in terms of attributes maybe, but not in terms of configuration (you need to explicitly set core.eol to lf to see this).  But I see your point, core.autocrlf just doesn't work very well unless you want CRLFs.
> The only justification I can think of for this behavior is the fact
> that on platforms with LF line endings, most tools can deal with
> CRLF line endings. Not very convincing.
Well, without "safe autocrlf", this would have worked as you expected, marking files as dirty and converting on checkin.  Unfortunately, without "safe autocrlf", core.autocrlf just doesn't work in practice, PRECISELY because the person with core.autocrlf set has to clean up after everybody else.
Show 5 quoted lines
> In the second scenario, the file is marked as dirty. Neither reset
> --hard nor checkout HEAD . fix the problem. The file has to be
> added and committed, after which the line endings are _still_ CRLF.
> This appears to be the old autocrlf=true behavior. Is this
> intentional?
Yes, since it uses the old autocrlf implementation.  The documentation states that you need to convert your repository when enabling normalization, but is this going to be big problem in practice?
Perhaps the working directory file should be converted to LF, but when?  When it is added?  When it's committed?  If you checkout -f after you commit the change, the file should have the correct line ending, because then it is normalized in the repository and git knows what to do with it.
Show 8 quoted lines
> The third scenario is similar to the second scenario, only it warns
> me about CRLF conversion during add and commit. The file still ends
> up having CRLF line endings in the work tree. git reset --hard does
> not fix the line endings. touch'ing the file finally makes git diff
> notice that the file is dirty, but git status still does not list
> the file.
> 
> So to me, end of line conversion is still as confusing as it gets.
All of your confusion seems to stem from starting with a repository that is not normalized and adding normalization to it.  Yes, that is a pain, but there is no way to avoid that, and there is a recipe for fixing it in the documentation.
Show 6 quoted lines
>> This should only be a problem if you set the "text" or "eol"
>> attributes in an existing repository, or if someone adds CRLFs to
>> a normalized file using an older version of git.
> 
> In other words, this will be a problem all the time, since by
> default people will not even know about text or eol.
By default people will not enable core.autocrlf either.  I just don't see the huge problem here.  If your repository does not need normalization, _good_!  Nothing will ever be normalized or converted.  If somebody wants to work on that repository but prefers CRLFs, they can enable core.autocrlf, and it will work sanely (thanks to "safe autocrlf"), converting text files that can safely be normalized back but leaving all other files alone.
If you later discover that you want normalized text files in your repository, you _will_ have to convert all your files.  That's a bit tricky, but it's not the huge problem you're making it out to be, and it only has to be done once.
-- 
Eyvind
Previous: Eyvind BernhardsenNext: Clemens Buchacher
Message 17 of 35 in “What's cooking extra”
  1. Junio C HamanoMay 19, 2010
  2. A Large Angry SCMMay 19, 2010
  3. Finn Arne GangstadMay 19, 2010
  4. Eyvind BernhardsenMay 19, 2010
  5. Clemens BuchacherMay 22, 2010
  6. Eyvind BernhardsenMay 22, 2010
  7. Clemens BuchacherMay 22, 2010
  8. Eyvind BernhardsenMay 23, 2010
  9. Clemens BuchacherMay 23, 2010
  10. Eyvind BernhardsenMay 23, 2010
  11. Ævar Arnfjörð BjarmasonMay 23, 2010
  12. Clemens BuchacherMay 24, 2010
  13. Dmitry PotapovMay 24, 2010
  14. Eyvind BernhardsenMay 24, 2010
  15. Clemens BuchacherMay 24, 2010
  16. Eyvind BernhardsenMay 24, 2010
  17. Eyvind BernhardsenMay 24, 2010
  18. Clemens BuchacherMay 24, 2010
  19. Eyvind BernhardsenMay 25, 2010
  20. Anthony YoungmanMay 25, 2010
  21. Eyvind BernhardsenJun 7, 2010
  22. Clemens BuchacherMay 25, 2010
  23. Dmitry PotapovMay 24, 2010
  24. Erik Faye-LundMay 24, 2010
  25. Dmitry PotapovMay 24, 2010
  26. Ævar Arnfjörð BjarmasonMay 21, 2010
  27. René ScharfeMay 22, 2010
  28. 1/8 grep: add test script for binary file handlingRené Scharfe, May 22, 2010
  29. 2/8 grep: grep: refactor handling of binary mode optionsRené Scharfe, May 22, 2010
  30. 3/8 grep: --count over binaryRené Scharfe, May 22, 2010
  31. 4/8 grep: --name-only over binaryRené Scharfe, May 22, 2010
  32. 5/8 grep: use memmem() for fixed string searchRené Scharfe, May 22, 2010
  33. 6/8 grep: continue case insensitive fixed string search after NUL charsRené Scharfe, May 22, 2010
  34. 7/8 grep: use REG_STARTEND for all matching if availableRené Scharfe, May 22, 2010
  35. 8/8 grep: support NUL chars in search strings for -FRené Scharfe, May 22, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.