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

Re: branch description

From
Johan Herland <johan@herland.net>
Date
Apr 22, 2008, 18:46 UTC
Message-ID
<200804222046.05175.johan@herland.net>
In-Reply-To
<alpine.DEB.1.10.0804221945060.3452@pollux.milkiway.cos>
On Tuesday 22 April 2008, Michael Dressel wrote:
Show 19 quoted lines
> On Friday 18 April 2008, Jakub Narebski wrote:
> > Let me sum up here proposals where to put branch description:
>
> what's the opinion of having a new branch object? Actually the tag
> object probably already does the job? This would spoil the elegant
> light weight current branch references. But tags are not that heavy.
>
> In this approach the tags would not reference commits but tags. And
> tags have annotation. The difference to the normal tags would be that
> these tags are referenced from refs/heads/<branch> instead of
> refs/tags.
>
> I have no clue how involved this change would become and if the
> benefit would justify the effort. I guess using proper objects for
> branches would only be justified if additional advantages could be
> achieved.
>
> Cheers,
>  	Michael

Nice idea, but it won't work, simply because branches are moving targets, whereas tags are not.

To illustrate, here's how things are structured between the refs (tags/branches) and the object DB:

refs/tags/lighweight  -------------------------> [commit object]
refs/tags/annotated   -----> [tag object] -----> [commit object]
refs/heads/branchname -------------------------> [commit object]

The annotated tag ref holds the SHA1 of the tag object which in turn holds the SHA1 of the commit object, while the two other ref types point directly at a commit object. The tag object works on the assumption that the commit object pointed to by the tag never changes. That's after all the whole point of a tag.

A branch - on the other hand - is _supposed_ to change. It changes by adding a new commit on top of the current commit, and updating the branch ref to point to the new commit. If we kept the branch description in a tag object, and stuck this between the branch ref and the commit object, we would suddenly have to rewrite the tag object every time we added another commit on the branch. This would make commits much more expensive, not to mention that for every commit you would drop the tag object pointing to the previous commit, in effect generating one garbage object per commit. This is clearly not what we want.

...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Michael DresselNext: Jakub Narebski
Message 2 of 3 in “Re: branch description”
  1. Michael DresselApr 22, 2008
  2. Johan HerlandApr 22, 2008
  3. Jakub NarebskiApr 22, 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.