Re: Git commit generation numbers
- From
Jakub Narebski <jnareb@gmail.com>
- Date
- Jul 21, 2011, 19:19 UTC
- Message-ID
- <m3mxg7sasa.fsf@localhost.localdomain>
- In-Reply-To
- <20110721124351.25143.qmail@science.horizon.com>
George Spelvin, could you please try not mangle CC to include only emails, stripping names (e.g. "spearce@spearce.org" instead of "Shawn Pearce <spearce@spearce.org>")?
"George Spelvin" <linux@horizon.com> writes:
> On <david@lang.hm> wrote: >> On Wed, 20 Jul 2011, Shawn Pearce wrote:
Show 26 quoted lines
>>> If the algorithm is always "gen(A) = max(gen(P) for each parent_of(A)) >>> + 1" then it doesn't matter who merged what commits, the same commit >>> appears at the same part of the graph relative to all of its >>> ancestors, and therefore always has the same generation number. This >>> is true whether or not the commit contains the generation number. > >> I have to think about this more, but I'm wondering about cases where the >> same result ia achieved via different methods, something along the lines >> of one person developing something with _many_ commits (creating a large >> generation number) that one person merges far sooner than another, causing >> the commits that they do after the merge to have much larger generation >> numbers than someone making the same changes, but doing the merge later > > Can't happen. Using the basic algorithm as Shawn described, the > generation number is defined uniquely by the ancestor DAG. > > The generation number is the length of the longest path to a > root (zero-ancestor) commit through the DAG. > > If you look at past discussion, several people have thought it was > okay to bake into the commit precsiely because it can be computed > once and will never change. > > However, git does have some ability to amend the history DAG after > it's been written, using grafts and replace objects. These can > change generation numbers, presisely because they change the DAG.
There is also another issue that I have mentioned, namely incomplete clones - which currently means shallow clone, without access to full history.
Nb. grafts are so horrible hack that I would be not against turning off generation numbers if they are used.
In the case of replace objects you need both non-replaced and replaced DAG generation numbers.
-- Jakub Narębski