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

Re: [PATCH] Respect crlf attribute even if core.autocrlf has not been set

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Aug 4, 2008, 16:06 UTC
Message-ID
<20080804160630.GW7008@dpotapov.dyndns.org>
In-Reply-To
<905315640808031154j28778cd6pee75e6b008304941@mail.gmail.com>
On Sun, Aug 03, 2008 at 11:54:34AM -0700, Tarmigan wrote:
Show 9 quoted lines
> On Sun, Aug 3, 2008 at 10:33 AM, Dmitry Potapov <dpotapov@gmail.com> wrote:
> > On Sun, Aug 03, 2008 at 09:54:42AM -0700, Tarmigan wrote:
> >>
> >> For all I care, git can consider the files as binary, but by *default*
> >> I should get back the same as I put in.
> >
> > Sorry, but Git is a source control system,
> 
> I think this is the heart of the disagreement.

I guess so... Because for me it is very important that most of files I store are text files. In fact, such operations as diff and merge would not make much sense for binary files, would they? IOW, Git is a revision control system, not a versioning file system.

> What I love about git
> is that git trusts me, the user, and it trusts my files.

Sure, git trusts you. You can always turn off some features if you don't like them; but the issue having the right defaults. autocrlf=true is the right default if you want to have CRLF in your work directory. And as long as text heuristic is right (and it works pretty damn good), you get exactly what you put in it. In very very rare cases where the heuristic is wrong, it will warn you about that you are not going to have back what you put. So, you can tell Git explicitly that you want this file stored as binary. But this situation is very unlikely unless you store in it something like svndump files, but storying such files in not the main purpose of Git.

So, I don't think that this CRLF conversion is a real issue, except that the fact that changing the global autocrlf value should not have changed autocrlf in already existing repositories. Because autocrlf is not just a preference, but also determines in what format your files in the working directory are stored. So, I believe it should be corrected. But even in this case, you do not really lose anything.

> It doesn't change the encoding of my filenames by default.

And not by default? Currently, does not support encoding filenames from your local encoding to UTF-8. And that will be a problem at some point if you store file names in non UTF-8 encoding. But it is a separate issue connected to i18n support. I don't think it makes sense to go into it right now as it is completely irrelevant to the problem we discuss.

What is relevant is that Git *does* change filename representation. For instance, if you try to add a file with a name 'foo\bar', Git will actually add 'foo/bar'. You see, on check-in, Git converts the directory separator from its Windows form ('\') to the format it uses internally ('/').

So, it is logical to do the same text files, because text files are sequences of lines separated by line-separator, which is CRLF on Windows, but its internal representation in Git is LF.

> It doesn't do keyword expansion by default.

Because keyword expansion is almost always meaningless thing to do in your working directory. It just makes things slower and you do not win *anything*. Arguably, there are some cases when you may want some expansion during export your sources to archive, but even that is very uncommon.

> It doesn't change the case of filenames by default.

Change case? Would it not be a completely insane thing to do? People put some meaning in what registry of letters when wrote names, why would you want Git (or any source control system) to mess up with that?

> If git is not willing to change the encoding/case of file*names* by
> default, how is it acceptable to change the *content* of the files
> themselves?

It does not change the content, it changes the EOL marker from its external to internal representation. It does the same thing as what C library on Windows does when you read or write files in the text mode. This should be completely transparent to users as long as autocrlf is not changed.

Dmitry
Previous: TarmiganNext: Dmitry Potapov
Message 46 of 58 in “Respect crlf attribute even if core.autocrlf has not been set”
  1. Respect crlf attribute even if core.autocrlf has not been setJohannes Schindelin, Jul 22, 2008
  2. Dmitry PotapovJul 22, 2008
  3. Johannes SchindelinJul 22, 2008
  4. Dmitry PotapovJul 23, 2008
  5. Junio C HamanoJul 23, 2008
  6. Johannes SchindelinJul 23, 2008
  7. Respect crlf attribute in "git add" even if core.autocrlf has not been setJohannes Schindelin, Jul 23, 2008
  8. Steffen ProhaskaJul 23, 2008
  9. Johannes SchindelinJul 23, 2008
  10. Dmitry PotapovJul 23, 2008
  11. Steffen ProhaskaJul 24, 2008
  12. Johannes SchindelinJul 24, 2008
  13. Dmitry PotapovJul 24, 2008
  14. Dmitry PotapovJul 24, 2008
  15. Johannes SchindelinJul 24, 2008
  16. Steffen ProhaskaJul 24, 2008
  17. Avery PennarunJul 24, 2008
  18. Johannes SchindelinJul 24, 2008
  19. Robin RosenbergJul 24, 2008
  20. Johannes SchindelinJul 24, 2008
  21. Junio C HamanoJul 23, 2008
  22. Johannes SchindelinJul 23, 2008
  23. Joshua JensenJul 23, 2008
  24. Avery PennarunJul 23, 2008
  25. Johannes SchindelinJul 23, 2008
  26. Eyvind BernhardsenJul 23, 2008
  27. Johannes SchindelinJul 23, 2008
  28. Eyvind BernhardsenJul 24, 2008
  29. Johannes SchindelinJul 25, 2008
  30. Eyvind BernhardsenJul 25, 2008
  31. Dmitry PotapovJul 25, 2008
  32. Eyvind BernhardsenJul 25, 2008
  33. Johannes SchindelinJul 26, 2008
  34. Eyvind BernhardsenJul 29, 2008
  35. Dmitry PotapovJul 29, 2008
  36. Eyvind BernhardsenJul 29, 2008
  37. Steffen ProhaskaJul 30, 2008
  38. Avery PennarunJul 30, 2008
  39. Steffen ProhaskaJul 30, 2008
  40. Avery PennarunJul 30, 2008
  41. Dmitry PotapovJul 30, 2008
  42. Avery PennarunJul 30, 2008
  43. TarmiganAug 3, 2008
  44. Dmitry PotapovAug 3, 2008
  45. TarmiganAug 3, 2008
  46. Dmitry PotapovAug 4, 2008
  47. Dmitry PotapovJul 30, 2008
  48. Eyvind BernhardsenAug 2, 2008
  49. Dmitry PotapovAug 3, 2008
  50. Robin RosenbergJul 23, 2008
  51. Junio C HamanoJul 23, 2008
  52. Johannes SchindelinJul 23, 2008
  53. Dmitry PotapovJul 23, 2008
  54. Junio C HamanoJul 23, 2008
  55. Johannes SchindelinJul 23, 2008
  56. Dmitry PotapovJul 24, 2008
  57. Johannes SchindelinJul 24, 2008
  58. Dmitry PotapovJul 24, 2008

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.