Re: RefTree: Alternate ref backend
From: Mike Hommey <hidden>
Date: 2016-06-15 23:07:30
On Thu, Dec 17, 2015 at 02:28:01PM -0800, Shawn Pearce wrote:
On Thu, Dec 17, 2015 at 2:10 PM, Jeff King [off-list ref] wrote:quoted
On Thu, Dec 17, 2015 at 01:02:50PM -0800, Shawn Pearce wrote:quoted
I started playing around with the idea of storing references directly in Git. Exploiting the GITLINK tree entry, we can associate a name to any SHA-1.Gitlink entries don't imply reachability, though. I guess that doesn't matter if your ref backend says "no, really, these are the ref tips, and they are reachable".Exactly. This works with existing JGit because it swaps out the ref backend. When GC tries to enumerate the roots (current refs), it gets these through the ref backend by scanning the tree recursively. The packer itself doesn't care where those roots came from. Same would be true for any other pluggable ref backend in git-core. GC has to ask the ref backend, and then trust its reply. How/where that ref backend tracks that is an implementation detail.quoted
But you could not push the whole thing up to another server and expect it to hold the whole graph.Correct, pushing this to another repository doesn't transmit the graph. If the other repository also used this for its refs backend, its now corrupt and confused out of its mind. Just like copying the packed-refs file with scp. Don't do that. :)quoted
Which is not strictly necessary, but to me seems like the real advantage of using git objects versus some other system.One advantage is you can edit HEAD symref remotely. Commit a different symlink value and push. :) I want to say more, but I'm going to hold back right now. There's more going on in my head than just this.quoted
Of course, the lack of reachability has advantages, too. You can drop commits pointed to by old reflogs without rewriting the ref history.Yes.
Related thread: "Allowing weak references to blobs and strong references to commits" http://marc.info/?l=git&m=142779648816577&w=2 Mike