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

Re: Consistent terminology: cached/staged/index

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Feb 26, 2011, 20:36 UTC
Message-ID
<AANLkTincNdUQ=736=M2Oei4LF0pR0c2T7r=bWJE3RFCu@mail.gmail.com>
In-Reply-To
<1297897887.24521.57.camel@drew-northup.unet.maine.edu>
On Thu, Feb 17, 2011 at 1:11 AM, Drew Northup <drew.northup@maine.edu> wrote:
Show 31 quoted lines
>
> On Sun, 2011-02-13 at 19:09 -0800, Pete Harlan wrote:
>> On 02/13/2011 02:58 PM, Junio C Hamano wrote:
>> >> --staged
>> >> ~~~~~~~~
>> >> diff takes --staged, but that is only to support some people's habits.
>> > The term "stage" comes from "staging area", a term people used to explain
>> > the concept of the index by saying "The index holds set of contents to be
>> > made into the next commit; it is _like_ the staging area".
>> >
>> > My feeling is that "to stage" is primarily used, outside "git" circle, as
>> > a logistics term.  If you find it easier to visualize the concept of the
>> > index with "staging area" ("an area where troops and equipment in transit
>> > are assembled before a military operation", you may find it easier to say
>> > "stage this path ('git add path')", instead of "adding to the set of
>> > contents...".
>>
>> FWIW, when teaching Git I have found that users immediately understand
>> "staging area", while "index" and "cache" confuse them.
>>
>> "Index" means to them a numerical index into a data structure.
>> "Cache" is a local copy of something that exists remotely.  Neither
>> word describes the concept correctly from a user's perspective.
>
> According to the dictionary (actually, more than one) "cache" is a
> hidden storage space. I'm pretty sure that's the sense most global and
> therefore most appropriate to thinking about Git. (It certainly
> describes correctly what web browser cache and on-CPU cache is doing.)
> One would only think the definition you gave applied if they didn't know
> that squirrels "cache" nuts. I don't think that the problem is the
> idiom.

Not really. If a squirrel "caches" nuts, it means a squirrel is putting them in a hidden place to save them for future use. So, in the future, if said squirrel wants a nut, it doesn't have to look for it in the trees, just go to the cache. So the cache makes it easier to access whatever your want.

IOW; if you don't cache something, you would have more trouble getting it, but you still can.

That's not what Git is doing. Git is not putting changes in a place so the can be more easily accessed in the future. It is using a temporary device that allows the commit to be built through an extended period of time. It's not a cache.

Show 10 quoted lines
>> I learned long ago to type "index" and "cached", but when talking (and
>> thinking) about Git I find "the staging area" gets the point across
>> very clearly and moves Git from interesting techie-tool to
>> world-dominating SCM territory.  I'm surprised that that experience
>> isn't universal.
>
> Perhaps that helps you associate it with other SCM/VCS software, but it
> didn't help me. When I realized that the "index" is called that BECAUSE
> IT IS AN INDEX (of content/data states for a pending commit operation)
> the sky cleared and the sun came out.

That's not an index. An index is a guide of pointers to something else. It allows you to find whatever you are looking for by looking in small table of pointers instead of looking through all the samples.

IOW; if you don't index something, you would have more trouble finding it, but you still can.

That's not what Git is doing.
Show 6 quoted lines
> In all reality the closest thing Git has to an actual staging area is
> all of the objects in .git/objects only recorded by the index itself.
> Git-stored objects not compressed into pack files could technically be
> described as "cached" using the standard definition--they aren't visible
> in the working directory. Unfortunately this probably just muddies the
> water for all too many users.

That's irrelevant. You can implement the same functionality in many other ways. How it is implement doesn't matter, what matters is what the user experiences.

Show 5 quoted lines
> So, in summary--the index is real, objects "cached" pending
> commit/cleanup/packing are real; any "staging area" is a rhetorical
> combination of the two. Given that rhetorical device may not work in all
> languages (as Junio mentioned earlier) I don't recommend that we rely on
> it.

Branches and tags are "rthetorical" devices as well. But behind scenes they are just refs. Shall we disregard 'branch' and 'tag'?

No. What Git does behind scenes is irrelevant to the user. What matters is what the device does, not how it is implemented; the implementation might change. "Stage" is the perfect word; both verb and a noun that express a temporary space where things are prepared for their final form.

-- 
Felipe Contreras
Previous: Drew NorthupNext: Drew Northup
Message 28 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.