From: Yann Dirson <ydirson@altern.org>
To: git@vger.kernel.org
Cc: Ryan Anderson <ryan@michonline.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [RFC] Applying a graft to a tree and "rippling" the changes through
Date: Sat, 19 Nov 2005 15:04:05 +0100 [thread overview]
Message-ID: <20051119140404.GD3393@nowhere.earth> (raw)
In-Reply-To: <Pine.LNX.4.63.0511180026080.18775@wbgn013.biozentrum.uni-wuerzburg.de>
On Fri, Nov 18, 2005 at 12:28:56AM +0100, Johannes Schindelin wrote:
> On Fri, 18 Nov 2005, Yann Dirson wrote:
>
> > Current commit objects refer to a child tree, but to parent _commits_.
> > Whereas it seems necessary to walk through the history line, and
> > easily get a changelog, it is semantically quite not right:
>
> Yes, it is. You base *your* work on *some* work. So, even if the trees may
> be equal, the base isn't.
Hm, I'm not sure I get your point here.
> > Indeed that emphasizes that the history lines are on living on a
> > higher level of abstraction that commits. Now what if we used
> > trees->tree commits, instead of the current commits->tree ones ?
>
> Now, how exactly would that be more abstract? Trees are just that:
> collections of files. Noone tells you what the idea was, which led from
> the last tree(s) to this one. That is not abstract.
Trees have an existence outside any consideration of what changes led
to them, as shown by the fact that git trees do not reference anything
outside them. And it is right that, at that level, noone tells you
how you got there - not less nor more than when you fetch a
linux-x.y.z.tar.gz2 from kernel.org.
Then at a bit higher level, you can consider changes from a tree to a
tree. What you usually do when you commit a change is explaining what
you change to the tree. Then changes themselves are just derived from
the trees (iow, "abstracted from" the trees), and you augment this
information with a message explaining what you did.
Then at a still higher level, you can derive history lines from the
individual trees and changes, and augment this information, eg. by
signing them.
The fact is, currently git does not distinguish much between those 2nd
and 3rd levels. It is my understanding that one of the most basic
design decisions of git was precisely to make the tool "aware" of the
1st level, and that it played an important part of why git works so
well: it maps to the reality closer than any other tool.
I was not convinced at all by the ideas when git appeared, but that
was probably because I was too much influenced by previous tools, all
focussing either on the history line (most of them), or on the changes
(darcs).
I think that if we can formalize into git the disctinction between
those two higher levels (and possibly other levels in the future), we
could get to an even more powerful and usable tool, even if, like git,
the basic ideas may look weird and possibly even counter-productive at
first sight.
As an example, here is an idea I had while formalizing the above 3rd
level: we also work at this level when rolling back a previous change,
since we take the history line into account. We could add, at that
History level, the possiblity to record this information, by linking
to that previous commit.
Now maybe I was mistaken in thinking the objects at the History level
should be only "cached" and temporary objects - that, and loop
prevention, and signed history lines, make too many reasons for them
to be permanent already :).
But their existence as such should not prevent to work at a lower
level. I'll have to reconsider the way I intended to design my
ArcheoloGIT toolkit, but I'm afraid it would need a new generation of
GIT ;)
Best regards,
--
Yann Dirson <ydirson@altern.org> |
Debian-related: <dirson@debian.org> | Support Debian GNU/Linux:
| Freedom, Power, Stability, Gratis
http://ydirson.free.fr/ | Check <http://www.debian.org/>
next prev parent reply other threads:[~2005-11-19 14:02 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-17 23:07 [RFC] Applying a graft to a tree and "rippling" the changes through Yann Dirson
2005-11-17 23:28 ` Johannes Schindelin
2005-11-19 14:04 ` Yann Dirson [this message]
2005-11-19 14:13 ` Yann Dirson
2005-11-19 15:27 ` Johannes Schindelin
2005-11-19 17:09 ` Yann Dirson
2005-11-19 17:23 ` Matthias Urlichs
2005-11-20 1:24 ` Johannes Schindelin
2005-11-20 7:32 ` Matthias Urlichs
2005-11-20 11:44 ` Johannes Schindelin
2005-11-20 22:35 ` Yann Dirson
2005-11-23 3:29 ` Paul Mackerras
2005-11-23 7:27 ` Matthias Urlichs
2005-11-23 17:14 ` Linus Torvalds
2005-11-20 22:32 ` Yann Dirson
2005-11-20 23:46 ` Johannes Schindelin
2005-11-21 2:24 ` Matthias Urlichs
2005-11-21 5:18 ` Ryan Anderson
2005-11-21 22:30 ` Yann Dirson
2005-11-18 13:57 ` sf
2005-11-18 17:25 ` Linus Torvalds
2005-11-19 0:49 ` Junio C Hamano
2005-11-19 1:07 ` Linus Torvalds
2005-11-19 1:21 ` Junio C Hamano
2005-11-19 1:29 ` Linus Torvalds
2005-11-19 13:27 ` Yann Dirson
2005-11-19 1:38 ` Yann Dirson
2005-11-18 15:54 ` Josef Weidendorfer
2005-11-19 13:16 ` Yann Dirson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20051119140404.GD3393@nowhere.earth \
--to=ydirson@altern.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=ryan@michonline.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).