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

Re: [PATCH/RFC 0/3] Per-repository end-of-line normalization

From
Avery Pennarun <apenwarr@gmail.com>
Date
May 7, 2010, 16:57 UTC
Message-ID
<v2q32541b131005070957j819890dbqe613985ff5f65b84@mail.gmail.com>
In-Reply-To
<7v4oijhdsi.fsf@alter.siamese.dyndns.org>
On Fri, May 7, 2010 at 12:33 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 8 quoted lines
> Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com> writes:
>> - An attribute called "auto-eol" is set in the repository to turn on
>>   normalization of line endings.  Since attributes are content, the
>>   setting is copied when the repository is cloned and can be changed in
>>   an existing repository (with a few caveats).  Setting this attribute
>>   is equivalent to setting "core.autocrlf" to "input" or "true".
>
> In what way is this attribute different from existing "crlf" attribute?

Mostly that it relates to the new core.eolStyle config option instead of core.autocrlf. Arguably you could use the same gitattribute to set both config options, but I don't know how you'd make that respond in a sane backwards-compatible fashion.

Show 6 quoted lines
> It feels as if this series is fixing shortcomings of the combination of
> core.autocrlf configuration and crlf attribute while trying very hard to
> keep their shortcomings when the user doesn't say so.  What is the
> downside of making the existing "core.autocrlf" + "crlf" combination do
> what your patch wanted to do without retaining this "keep the existing
> shortcomings for backward compatibility"?

Is this even possible? If core.autocrlf is set, then files all over the place start getting crlf conversion, even if no attributes are set at all. If core.eolStyle is set, only files with the auto-eol attribute set appropriately will experience any conversion.

Maybe the options aren't named ideally. "core.eolStyle" might better be named "core.nativeEol" - it tells git what the native EOL style is on your computer / in this repository, but it doesn't tell git to *do* anything with this information. The problem with core.autocrlf is that it mixes two concepts: identifying your native EOL style, and telling git to do stuff. The existing gitattribute can then tell git *not* to do stuff, but almost no projects have a .gitattributes file that does this.

>> 1. Setting core.autocrlf in your global or system configuration is a
>> pain
>
> This is a wrong thing to do to begin with, and not worth discussing.

Ha, doesn't msysgit do this by default? It did at one point, anyway. I use cygwin git (which doesn't because it thinks it's Unix) so I don't know.

If this was ever the default behaviour, then it's at least not *obviously* wrong.

The end result is that nobody really likes the current autocrlf behaviour, though, so I'd agree that it *ends up* being wrong. Just as setting it on a per-checkout basis also ends up being wrong, because it's so easy to forget.

> You
> know and your readers know that line ending convention in the repository
> data (i.e. blobs) is under project control while line ending convention in
> the working tree is end user preference.
Yes.  But the current system doesn't make it very easy to state your preference.
Show 8 quoted lines
>> 2. Setting core.autocrlf in an individual repository would be okay
>> except that naive users will do it after they have already cloned:
>> unless core.autocrlf is set globally, the clone will have the wrong line
>> endings, and the user needs to know how to refresh it manually (rm -rf *
>> && git checkout -f).
>
> This may be a worthy goal.  But if a "auto-eol" attribute "fixes" this,
> perhaps "crlf" attribute can be taught to fix it the same way, no?
It fixes it by making the global setting actually do what people want.
 I'm not sure the existing config option can be made to work like
that.

Again, maybe it would make sense to combine a single attribute but have two config options (and people can eventually just stop using core.autocrlf altogether). I suspect it might subtly break some existing projects, though.

Have fun,
Avery
Previous: Junio C HamanoNext: Linus Torvalds
Message 24 of 82 in “What should be the CRLF policy when win + Linux?”
  1. matMay 5, 2010
  2. Ramkumar RamachandraMay 5, 2010
  3. matMay 6, 2010
  4. Erik Faye-LundMay 6, 2010
  5. hasen jMay 6, 2010
  6. Wilbert van DolleweerdMay 6, 2010
  7. hasen jMay 6, 2010
  8. Linus TorvaldsMay 6, 2010
  9. Erik Faye-LundMay 6, 2010
  10. hasen jMay 6, 2010
  11. Linus TorvaldsMay 6, 2010
  12. Erik Faye-LundMay 6, 2010
  13. hasen jMay 6, 2010
  14. Erik Faye-LundMay 6, 2010
  15. Anthony W. YoungmanMay 18, 2010
  16. 0/3 Per-repository end-of-line normalizationEyvind Bernhardsen, May 6, 2010
  17. 1/3 Add "auto-eol" attribute and "core.eolStyle" config variableEyvind Bernhardsen, May 6, 2010
  18. 2/3 Add tests for per-repository eol normalizationEyvind Bernhardsen, May 6, 2010
  19. 3/3 Add per-repository eol normalizationEyvind Bernhardsen, May 6, 2010
  20. Avery PennarunMay 6, 2010
  21. Avery PennarunMay 6, 2010
  22. Erik Faye-LundMay 7, 2010
  23. Junio C HamanoMay 7, 2010
  24. Avery PennarunMay 7, 2010
  25. Linus TorvaldsMay 7, 2010
  26. Linus TorvaldsMay 7, 2010
  27. Avery PennarunMay 7, 2010
  28. Linus TorvaldsMay 7, 2010
  29. Avery PennarunMay 7, 2010
  30. Linus TorvaldsMay 7, 2010
  31. Avery PennarunMay 7, 2010
  32. Linus TorvaldsMay 7, 2010
  33. Linus TorvaldsMay 7, 2010
  34. Eyvind BernhardsenMay 7, 2010
  35. Linus TorvaldsMay 7, 2010
  36. Eyvind BernhardsenMay 7, 2010
  37. Linus TorvaldsMay 7, 2010
  38. Avery PennarunMay 7, 2010
  39. Eyvind BernhardsenMay 7, 2010
  40. Linus TorvaldsMay 7, 2010
  41. Linus TorvaldsMay 7, 2010
  42. Linus TorvaldsMay 7, 2010
  43. Avery PennarunMay 7, 2010
  44. hasen jMay 7, 2010
  45. Linus TorvaldsMay 7, 2010
  46. hasen jMay 7, 2010
  47. Linus TorvaldsMay 7, 2010
  48. hasen jMay 8, 2010
  49. Linus TorvaldsMay 8, 2010
  50. hasen jMay 8, 2010
  51. Linus TorvaldsMay 8, 2010
  52. hasen jMay 8, 2010
  53. Robert BuckMay 8, 2010
  54. Avery PennarunMay 8, 2010
  55. hasen jMay 8, 2010
  56. Robert BuckMay 8, 2010
  57. Avery PennarunMay 8, 2010
  58. Avery PennarunMay 8, 2010
  59. Avery PennarunMay 7, 2010
  60. Dmitry PotapovMay 8, 2010
  61. Linus TorvaldsMay 8, 2010
  62. Dmitry PotapovMay 8, 2010
  63. Eyvind BernhardsenMay 9, 2010
  64. Robert BuckMay 9, 2010
  65. Avery PennarunMay 7, 2010
  66. Eyvind BernhardsenMay 7, 2010
  67. Nicolas PitreMay 7, 2010
  68. Avery PennarunMay 7, 2010
  69. Nicolas PitreMay 7, 2010
  70. Avery PennarunMay 7, 2010
  71. Nicolas PitreMay 7, 2010
  72. Avery PennarunMay 7, 2010
  73. A Large Angry SCMMay 7, 2010
  74. Avery PennarunMay 7, 2010
  75. Linus TorvaldsMay 7, 2010
  76. Nicolas PitreMay 7, 2010
  77. Junio C HamanoMay 7, 2010
  78. Eyvind BernhardsenMay 7, 2010
  79. Finn Arne GangstadMay 7, 2010
  80. Avery PennarunMay 7, 2010
  81. Eyvind BernhardsenMay 7, 2010
  82. GelonidaMay 7, 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.