From: Johan Herland <johan@herland.net>
To: Steven Grimm <koreth@midwinter.com>
Cc: git@vger.kernel.org, Junio C Hamano <junkio@cox.net>
Subject: Re: Refactoring the tag object; Introducing soft references (softrefs); Git 'notes' (take 2)
Date: Sun, 10 Jun 2007 01:16:45 +0200 [thread overview]
Message-ID: <200706100116.46062.johan@herland.net> (raw)
In-Reply-To: <466B305A.5080802@midwinter.com>
On Sunday 10 June 2007, Steven Grimm wrote:
> Being able to specify relationships between commits after the fact seems
> like a very useful facility.
>
> Does it make sense to have type information to record what the
> relationship between two objects means? Without that, it seems like
> it'll be hard to build much of a tool set on top of this feature, since
> no two tools that made use of it could unambiguously query just their
> own softrefs.
Actually MadCoder/Pierre had a similar idea on IRC. He wanted to separate
softrefs into namespaces, so that softrefs for tags could live in a
different place than softrefs associated with his "gits" bug tracker.
I haven't thought very much about this, but it's certainly possible to do
something like this. What do the rest of y'all think?
> A few use cases for relationships-after-the-fact come to mind in
> addition to the one the patch itself mentions:
>
> A facility like this could replace the info/grafts file, or at least
> provide another way to turn a regular commit into a merge commit. Just
> put a "manually specified merge parent" ref between the target revision
> and the one you want git to think you've merged from. That would scale a
> lot better than info/grafts does, I suspect, if only by virtue of being
> O(log n) searchable thanks to the sorting.
Yes, I _knew_ this was similar to grafts in some way :) While working on
this, I tried to see if I could leverage grafts somewhere in my design, but
I found them to be too commit-bound and specific. But when you look at it
the other way it seems to make more sense.
> One could easily imagine recording a "cherry picked" softref, which
> could, e.g., be the rebase machinery to skip over an already-applied
> revision. IMO the lack of any tool-readable history about cherry picking
> -- which is, after all, a sort of merge, at least conceptually -- is a
> shortcoming in present-day git. (Not a huge one, but if nothing else
> it'd be great to see cherry picking represented in, e.g., the gitk
> history display.)
>
> It might be possible to annotate rebases to make pulling from rebased
> branches less troublesome. If you have
>
> A--B--C--D
> \
> -E--F--G
>
> and you rebase E onto D, a "rebased from" softref could be recorded
> between E and E':
>
> A--B--C--D
> \ \
> -E....E'--F'--G'
>
> Then a pulling client could potentially use that information to cleanly
> replay the rebase operation to keep its history straight. Perhaps if you
> could record historical rebases like that, you could do away with the
> current gotchas involving rebasing shared repositories. One negative
> side effect would be that you'd end up needing to keep E around where
> before you'd have been able to throw it away, but it should delta
> compress well, and you can, I think, still prune revisions F and G in
> the above picture. Or maybe it's enough to just keep E's SHA1 around
> without actually retaining its contents.
Whoa. I hadn't even imagined this, but I guess you're right. I actually
thought about solving the same problem (using a much worse method) way back
in May [1], but I'd since totally forgotten about it.
> But in any event, this seems like the start of a useful new set of
> capabilities for git.
Thanks a lot for sharing your ideas. :)
Have fun!
...Johan
[1] http://article.gmane.org/gmane.comp.version-control.git/46137
--
Johan Herland, <johan@herland.net>
www.herland.net
next prev parent reply other threads:[~2007-06-09 23:17 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-04 0:51 Refactoring the tag object; Introducing soft references (softrefs); Git 'notes' (take 2) Johan Herland
2007-06-04 0:51 ` [PATCH 0/6] Refactor the tag object Johan Herland
2007-06-04 0:52 ` [PATCH 1/6] Refactor git tag objects; make "tag" header optional; introduce new optional "keywords" header Johan Herland
2007-06-04 6:08 ` Matthias Lederhofer
2007-06-04 7:30 ` Johan Herland
2007-06-04 0:53 ` [PATCH 2/6] git-show: When showing tag objects with no tag name, show tag object's SHA1 instead of an empty string Johan Herland
2007-06-04 0:53 ` [PATCH 3/6] git-fsck: Do thorough verification of tag objects Johan Herland
2007-06-04 5:56 ` Matthias Lederhofer
2007-06-04 7:51 ` Johan Herland
2007-06-06 7:18 ` Junio C Hamano
2007-06-06 8:06 ` Johan Herland
2007-06-06 9:03 ` Junio C Hamano
2007-06-06 9:21 ` Junio C Hamano
2007-06-06 10:26 ` Johan Herland
2007-06-06 10:35 ` Junio C Hamano
2007-06-04 0:54 ` [PATCH 4/6] Documentation/git-mktag: Document the changes in tag object structure Johan Herland
2007-06-04 0:54 ` [PATCH 5/6] git-mktag tests: Fix and expand the mktag tests according to the new " Johan Herland
2007-06-04 0:54 ` [PATCH 6/6] Add fsck_verify_ref_to_tag_object() to verify that refname matches name stored in tag object Johan Herland
2007-06-04 20:32 ` [PATCH 0/6] Refactor the " Junio C Hamano
2007-06-07 22:13 ` [PATCH] Fix bug in tag parsing when thorough verification was in effect Johan Herland
2007-06-09 18:19 ` [PATCH 0/7] Introduce soft references (softrefs) Johan Herland
2007-06-09 18:21 ` [PATCH 1/7] Softrefs: Add softrefs header file with API documentation Johan Herland
2007-06-10 6:58 ` Johannes Schindelin
2007-06-10 7:43 ` Junio C Hamano
2007-06-10 7:54 ` Johannes Schindelin
2007-06-10 14:00 ` Johan Herland
2007-06-10 14:27 ` Jakub Narebski
2007-06-10 14:45 ` [PATCH] Teach git-gc to merge unsorted softrefs Johan Herland
2007-06-09 18:22 ` [PATCH 2/7] Softrefs: Add implementation of softrefs API Johan Herland
2007-06-09 18:22 ` [PATCH 3/7] Softrefs: Add git-softref, a builtin command for adding, listing and administering softrefs Johan Herland
2007-06-09 18:23 ` [PATCH 4/7] Softrefs: Add manual page documenting git-softref and softrefs subsystem in general Johan Herland
2007-06-09 18:23 ` [PATCH 5/7] Softrefs: Add testcases for basic softrefs behaviour Johan Herland
2007-06-09 18:24 ` [PATCH 6/7] Softrefs: Administrivia associated with softrefs subsystem and git-softref builtin Johan Herland
2007-06-09 18:24 ` [PATCH 7/7] Teach git-mktag to register softrefs for all tag objects Johan Herland
2007-06-09 18:25 ` [PATCH] Change softrefs file format from text (82 bytes per entry) to binary (40 bytes per entry) Johan Herland
2007-06-10 8:02 ` Johannes Schindelin
2007-06-10 8:30 ` Junio C Hamano
2007-06-10 9:46 ` Johannes Schindelin
2007-06-10 14:03 ` Johan Herland
2007-06-09 23:55 ` Comment on weak refs Junio C Hamano
2007-06-10 1:25 ` Johan Herland
2007-06-10 6:33 ` Johannes Schindelin
2007-06-10 13:41 ` Johan Herland
2007-06-10 14:09 ` Pierre Habouzit
2007-06-10 14:25 ` Pierre Habouzit
2007-06-10 9:03 ` Pierre Habouzit
2007-06-10 15:26 ` Jakub Narebski
2007-06-09 22:57 ` Refactoring the tag object; Introducing soft references (softrefs); Git 'notes' (take 2) Steven Grimm
2007-06-09 23:16 ` Johan Herland [this message]
2007-06-10 8:29 ` Pierre Habouzit
2007-06-10 14:31 ` Johan Herland
2007-06-10 19:42 ` Steven Grimm
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=200706100116.46062.johan@herland.net \
--to=johan@herland.net \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=koreth@midwinter.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.