On Thu, Dec 17, 2015 at 02:28:01PM -0800, Shawn Pearce wrote: > On Thu, Dec 17, 2015 at 2:10 PM, Jeff King <peff@xxxxxxxx> wrote: > > On Thu, Dec 17, 2015 at 01:02:50PM -0800, Shawn Pearce wrote: > > > >> 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. > > > 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. :) > > > 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. > > > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html