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

Re: Git terminology: remote, add, track, stage, etc.

From
Jakub Narebski <jnareb@gmail.com>
Date
Oct 19, 2010, 20:57 UTC
Message-ID
<m3k4ldlx56.fsf@localhost.localdomain>
In-Reply-To
<202EB46D-10D0-4090-A9DA-5796769F61A2@gmail.com>
Re-added (some of) CC list; at least all quoted authors are there.
Thore Husfeldt <thore.husfeldt@gmail.com> writes:
Show 13 quoted lines
> Thank you all for your many and well-thought out replies. I learned
> a lot.
> 
> Jonathan Nieder:
> 
> JNi> So what would be a better term [for tracking]?
> 
> Trailing is better than tracking, since it hints at some degree of
> sloth, but I have not thought this through. (I also think that it
> may be a strategic mistake to advocate looking for a new name; as
> long as tracking is used consistently the problem with a misleading
> metaphor is not so big, and the name change alienates a large group
> of people whose consent is important.)

It is harder to use as adjective though, compare "remote-tracking [branch]" with "remote-trailing [branch]"... or is it just "trailing branch"?

Besides I don't think that 'remote-tracking' has to mean _automatically_ tracking; it is *used* to track.

Show 10 quoted lines
> Matthiey Moy:
> 
> MM> Git's huge sin, after all (judging from most complaints I see
> MM> about it), is that It Doesn't Use Exactly The Same Model (and
> MM> thus Terminology) That CVS Did...
> 
> 
> My analysis of Git’s wickedness is interestingly different. Git has
> a clean and simple model that should be very easy to
> understand.

The unfortunate consequence of this is that many git command and much of git documentation is based on this understanding. It would be better to have documentation centered around 'user stories', not techicalities.

For example instead of `git unstage <file>`, one has to use `git reset -- <file>`; one has to understand how contents is moved between repository (commits), staging area (index / cache) and worktree to arrive at this command. Fortunately `git status` and the comments in commit message template help users there, but it would be nice not to have to rely on this.

> Git’s rhetorical traditions prevent that understanding. Git is
> really, really hard to learn, no matter where you come from, but
> there is no inherent reason for that.

Well, there is a matter of debate how much of git complexity is accidental complexity which should be eliminated, and how much is essential complexity.

For example user-visible staging area[1], or git branching model[2] can be confusing, at least to users coming from other version control systems. Those concepts though are necessary to allow much of power of git. In the case of visible staging area dealing with conflicts during merge and choosing piece-by-piece what is to be in next commit. In the case of git branching model, it allows for interacting with multiple multi-branch repositories without worrying about single global namespace for branch names.

[1] Other version control systems have at least a shadow of it,
    because they need to know which files are to be versioned
    (tracked).
[2] I mean here the difference between refs/heads/* and
    refs/remotes/<remote>/* refs, and mapping between tracked branches
    in remote repository and remote-tracking branches in given
    repository.
 
Show 10 quoted lines
> The steepness of the learning curve (rather than the divergence from
> other systems’s terminology) is the single biggest complaint against
> git, evidenced by my own anecdotal evidence from web surfing, and by
> the Git user survey. It should be viewed as Git’s biggest current
> problem by an order of magnitude. It makes me think twice and thrice
> before asking my colleagues to collaborate with me using Git; I will
> probably learn Mercurial and advocate using that instead; it’s
> almost as nice, and I don’t feel embarrassed advocating it. Using
> git for myself is great (now I understand it) but it is unclear if I
> should invest social capital to convince others to use it as well.

I guess that some of _perceived_ ease of use of Mercurial was generated by the fast that (at least in the past) it had superior documentation in the form of "Mercurial: The Definitive Guide" aka hgbook. Though nowadays there is "Git User's Manual" and "Pro Git", it is hard to fight prejudice.

Show 9 quoted lines
> Sverre Rabbelier:
> 
> SR> What do you mean with the last part (about `git branch -r`)? The
> SR> fact that 'refs/remotes' is not immutable?
> 
> Well, consider for example the simple obfuscatory mastery of the
> following line in the user manual:
> 
> > $ git branch -r			# list all remote branches
So you say that it should be instead the following, isn't it?
>   $ git branch -r		# list all remote-tracking branches
Show 9 quoted lines
> 
> 
> Yes, I get it *now*. And I begin to feel the corruption spreading in
> my own brain already: I myself start to think of origin/master as a
> ``remote branch''. Give me a few more weeks and I will be
> completely assimilated in the mindset.
> 
> (Note to self: submit a patch about this before my assimilation is
> complete. I already fixed it and committed to my local branch.)
That would be very nice.
Show 12 quoted lines
> 
> Matthieu again:
> 
> MM> We already came up with a better wording, namely "upstream", and
> MM> used in in "git push --set-upstream".
> 
> Oh, I didn’t know that. I was convinced that "upstream" was
> cruft from when git was chiefly a tool to help Linus maintain the
> Linux kernel. Let's see if I get this right:
> 
> The remote-tracking branch "origin/master" is *upstream* (the
> upstream?) of the local branch "master",
Right.
> and [local branch "master"] *tracks* the remote origin’s branch
> "master"? (local) "master" is downstream of "origin/master"?

With above clarification: right. Though using "track" here was mistake ("follows" or "is downstream").

> 
> This would be useful. And @{u} is good. (Does it have an inverse?)

One branch can have only one "upstream" (in old terminology: it can track only one branch). But the reverse doesn't hold: single remote-tracking branch can be upstream for many branches (e.g. many feature branches based on the same long-lived branch). The mapping is one-to-many, so there is no inverse.

Show 5 quoted lines
> 
> I’m not sure I like the particular word, but that’s a minor complaint. 
> 
> ( For completeness: A small terminological quibble is that upstream
> doesn’t verb well.
That's why git has `--set-upstream` ;-)
Show 11 quoted lines
> A bigger conceptual quibble is that this decision is not
> workflow-neutral. It enforces git’s hierarchical linux-kernel
> development tradition, rather than embracing a truly distributed
> model where everybody is the same. When I think of distributed
> version control I like to think of Alice having a remote-tracking
> bob/master and Bob having a remote-tracking alice/master. Of course,
> it is still meaningful for Alice to say "the upstream of
> bobs_latest_crazy_ideas is bob/master", and for Bob to say "the
> upstream of alices_inane_ramblings is alice/master". But it
> introduces a notion of hierarchy that is inimical to the concept of
> distribution, and not workflow-neutral. )

Actually it is inimical to pull-based workflow, not to hierarchical development. "Upstream" is where you pull from.

Sidenote: having 'canonical' repository that (almost) everybody pulls
from is I think quite common in DVCS-based development, isn't it?
Show 16 quoted lines
> 
> Of course, upstream could be called supercalifragilistic and I would
> still like it. Consistency is more important than having good
> metaphors. (But good metaphors would be better, all other things
> being equal.)
> 
> Jakub Narebski:
> 
> JNa> Note that it is not as easy as it seems at first glance.  There
> JNa> are *two* such options, which (as you can read in gitcli(7)
> JNa> manpage) have slightly different meaning:
> 
> Wow. Thanks for pointing this out, I did not know that, and it
> explains a lot. I must say that to everybody else than a git
> developer, this state of affairs is a proof that something is wrong,
> rather than an obstruction for improvement.

What I wanted to say that any proposal for replacing 'cache'/'cached' and 'index' terms has to take into account that you might want to operate on staging area *instead of* default target (`--cached`), or *in addition to* default target (`--index`).

Though it is not widespread issue: only git-apply uses both --cached and --index, git-stash uses only --index, and all other commands use only --cached (if any).

Well, there is also outlier of `git diff --no-index`, but it is more lack of good name for an option :-P

Show 8 quoted lines
> 
> ??> I do not think debating on changing the terminology is a
> ??> particularly productive use of our time.
> 
> I agree in the sense that *how* the words are used is more important
> than *which* words are used, and I realise that I should not have
> put "terminology" in the headline, because that makes it about
> words, not *explanations* or terminological *discipline*.
What should you put in headline / subject, then?
-- 
Jakub Narebski
Poland
ShadeHawk on #git
Previous: Thore HusfeldtNext: Michael Haggerty
Message 46 of 59 in “Git terminology: remote, add, track, stage, etc.”
  1. Thore HusfeldtOct 18, 2010
  2. Jonathan NiederOct 18, 2010
  3. reset: accept "git reset <removed file>"Jonathan Nieder, Oct 18, 2010
  4. Junio C HamanoOct 18, 2010
  5. Jonathan NiederOct 19, 2010
  6. Junio C HamanoOct 19, 2010
  7. Jonathan NiederOct 19, 2010
  8. Sverre RabbelierOct 18, 2010
  9. Junio C HamanoOct 19, 2010
  10. Ramkumar RamachandraOct 19, 2010
  11. Jonathan NiederOct 19, 2010
  12. Sverre RabbelierOct 19, 2010
  13. Thore HusfeldtOct 19, 2010
  14. User manual: "You cannot check out these remote-tracking branches"Jonathan Nieder, Oct 19, 2010
  15. Matthieu MoyOct 19, 2010
  16. Nicolas PitreOct 19, 2010
  17. Junio C HamanoOct 19, 2010
  18. 0/4 reset: be more flexible about <rev>Jonathan Nieder, Oct 19, 2010
  19. 1/4 reset -p: accept "git reset -p <tree>"Jonathan Nieder, Oct 19, 2010
  20. 2/4 reset: accept "git reset <tree> <path>"Jonathan Nieder, Oct 19, 2010
  21. 3/4 reset: accept "git reset -- <path>" from unborn branchJonathan Nieder, Oct 19, 2010
  22. 4/4 reset: accept "git reset HEAD <path>" from unborn branchJonathan Nieder, Oct 19, 2010
  23. Junio C HamanoOct 19, 2010
  24. Jonathan NiederOct 19, 2010
  25. Ramkumar RamachandraOct 27, 2010
  26. Drew NorthupOct 27, 2010
  27. Matthieu MoyOct 27, 2010
  28. Ramkumar RamachandraOct 28, 2010
  29. Matthieu MoyOct 28, 2010
  30. Matthieu MoyOct 18, 2010
  31. Miles BaderOct 19, 2010
  32. Wincent ColaiutaOct 19, 2010
  33. Miles BaderOct 19, 2010
  34. Wincent ColaiutaOct 19, 2010
  35. Eugene SajineOct 19, 2010
  36. Paul BolleOct 22, 2010
  37. Eugene SajineOct 22, 2010
  38. Drew NorthupOct 22, 2010
  39. Thore HusfeldtOct 20, 2010
  40. Matthieu MoyOct 20, 2010
  41. Drew NorthupOct 20, 2010
  42. Jakub NarebskiOct 18, 2010
  43. Matthijs KooijmanOct 19, 2010
  44. Jakub NarebskiOct 19, 2010
  45. Thore HusfeldtOct 19, 2010
  46. Jakub NarebskiOct 19, 2010
  47. Michael HaggertyOct 21, 2010
  48. Drew NorthupOct 21, 2010
  49. Thore HusfeldtOct 21, 2010
  50. Drew NorthupOct 21, 2010
  51. Thore HusfeldtOct 21, 2010
  52. Drew NorthupOct 21, 2010
  53. Miles BaderOct 22, 2010
  54. Drew NorthupOct 22, 2010
  55. Porcelain scripts: Rewrite cryptic "needs update" error messageRamkumar Ramachandra, Oct 19, 2010
  56. Ramkumar RamachandraOct 27, 2010
  57. Junio C HamanoNov 5, 2010
  58. Ævar Arnfjörð BjarmasonFeb 12, 2011
  59. Drew NorthupOct 19, 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.