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

Re: Consistent terminology: cached/staged/index

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Feb 27, 2011, 00:46 UTC
Message-ID
<20110227004637.GC20712@elie>
In-Reply-To
<AANLkTimyXciScc5K6ozggMHsy9YmgyOFpy6pgKBEypC9@mail.gmail.com>
Hi,

Felipe Contreras wrote: [out of order for convenience]

> Why should the users care about the stat() information? Or how the
> merge conflicts are being tracked?

The second question is very easy to answer (depending on what "how" means, of course). Because people integrating changes from multiple places need to be able to resolve a conflicted merge.

> That's plumbing, not porcelain.
I don't disagree.  The analogy is almost perfect.

And the thing is, in the real world, people know about plumbing. They don't care about the details, but they know there are these things called pipes, and that water tends to flow downward, and that if one of them freezes, it will burst. This knowledge is useful.

Likewise, it is useful to know:
 - After you use "cp -a" to copy a repository, the first operation
   you perform is going to be slower.  The cached stat() information
   is stale.
 - Until you run "git add", there is only one copy of your data, in
   the worktree.  After you run "git add", there are two copies.
   Once you run "git commit", that second copy will last at least
   as long as your commit does.
   So there is some chance of recovery from fat-finger mistakes,
   even before a commit.
 - During a merge, you can mark your progress by collapsing index
   entries with 'git add'.  "git diff" will show the state of the
   merge.  You can read the competing versions of a file with
   "git show :2:path/to/file" and "git show :3:path/to/file".
 - Index-only operations tend to be faster, since
    (1) the cached blobs are not changing, so we can save time
        stat(2)-ing and read(2)-ing files
    (2) blobs are compressed: less I/O.  Longstanding blobs are
        in pack files: good caching and I/O patterns.
   So you can speed up your slow "git grep" by using
   "git grep --cached".
 - When scripting, you can use a temporary index file to avoid
   affecting the remembered worktree state.

But so what? I have nothing against clearer terms. I am just saying that (1) we should be explaining these things somewhere and (2) a global s/index/only one of the things the index does/ is a bad idea, because it would make the documentation *wrong*.

> There's always resistance, but 1.8 is supposed to contain stuff as "if
> git was written from scratch".

I thought 1.8 was supposed to provide an opportunity to correct some long-known mistakes that we had been holding back on for backward compatibility reasons. That doesn't mean we should forget the cost of change.

Thanks for your work, and hope that helps. Jonathan

Previous: Felipe ContrerasNext: Junio C Hamano
Message 42 of 65 in “Consistent terminology: cached/staged/index”
  1. Piotr KrukowieckiFeb 13, 2011
  2. Jonathan NiederFeb 13, 2011
  3. Junio C HamanoFeb 13, 2011
  4. Miles BaderFeb 14, 2011
  5. Junio C HamanoFeb 14, 2011
  6. Miles BaderFeb 14, 2011
  7. Johannes SixtFeb 14, 2011
  8. Miles BaderFeb 14, 2011
  9. Michael J GruberFeb 14, 2011
  10. Miles BaderFeb 14, 2011
  11. Junio C HamanoFeb 14, 2011
  12. Miles BaderFeb 14, 2011
  13. Junio C HamanoFeb 14, 2011
  14. Miles BaderFeb 14, 2011
  15. Junio C HamanoFeb 15, 2011
  16. Nguyen Thai Ngoc DuyFeb 14, 2011
  17. Michael J GruberFeb 14, 2011
  18. Nguyen Thai Ngoc DuyFeb 14, 2011
  19. Felipe ContrerasFeb 14, 2011
  20. Nguyen Thai Ngoc DuyFeb 14, 2011
  21. Jakub NarebskiFeb 14, 2011
  22. Michael J GruberFeb 14, 2011
  23. Felipe ContrerasFeb 14, 2011
  24. Michael J GruberFeb 14, 2011
  25. Felipe ContrerasFeb 14, 2011
  26. Pete HarlanFeb 14, 2011
  27. Drew NorthupFeb 16, 2011
  28. Felipe ContrerasFeb 26, 2011
  29. Drew NorthupFeb 27, 2011
  30. AghilesFeb 27, 2011
  31. Drew NorthupFeb 28, 2011
  32. Piotr KrukowieckiFeb 14, 2011
  33. Jonathan NiederFeb 14, 2011
  34. Pete HarlanFeb 15, 2011
  35. Jonathan NiederFeb 15, 2011
  36. Piotr KrukowieckiFeb 15, 2011
  37. Jonathan NiederFeb 15, 2011
  38. Felipe ContrerasFeb 26, 2011
  39. Jonathan NiederFeb 26, 2011
  40. Miles BaderFeb 27, 2011
  41. Felipe ContrerasFeb 27, 2011
  42. Jonathan NiederFeb 27, 2011
  43. Junio C HamanoFeb 27, 2011
  44. Jeff KingFeb 27, 2011
  45. Miles BaderFeb 27, 2011
  46. Jon SeymourFeb 27, 2011
  47. Junio C HamanoFeb 27, 2011
  48. Michael J GruberFeb 28, 2011
  49. Drew NorthupFeb 27, 2011
  50. Jeff KingFeb 28, 2011
  51. DavidMar 1, 2011
  52. Matthieu MoyMar 1, 2011
  53. Alexei SholikMar 1, 2011
  54. Drew NorthupMar 1, 2011
  55. Alexei SholikMar 1, 2011
  56. Drew NorthupMar 1, 2011
  57. Alexey FeldgendlerMar 1, 2011
  58. Drew NorthupMar 1, 2011
  59. Felipe ContrerasMar 4, 2011
  60. Miles BaderMar 5, 2011
  61. Jonathan NiederMar 5, 2011
  62. Drew NorthupMar 6, 2011
  63. Phil HordFeb 27, 2011
  64. Jonathan NiederMar 1, 2011
  65. Victor EngmarkMar 1, 2011

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.