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 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).