Ramkumar Ramachandra <artag...@gmail.com> writes:
> I asked you a very simple question: what happens when I do "git push"?
You asked "does push send unreachable cruft?" and I said No. Does
that answer your question?
> 3. After a few days of working, the gc heuristics figure out that I
> have too much garbage and too many packs; a cleanup is required. The
> gc --auto which doesn't tolerate fragmentation: it tries to put
> everything into one large pack.
Today's "gc --auto" skims the history shallowly and packs loose
objects into a single _new_ pack. If you start from a single pack
and enough loose objects and run "gc --auto", you will have two
packs, one intact from the original, one new.
> We're talking about tackling the gc aggression problem in 3.
> when I say "git push" (or when gc decides to repack), won't I need
> to explode the young pack into loose objects, do a reachability
> analysis, and repack anyway?
You do not explode anything. "push" will read objects from
anywhere, either from loose or packed, and send a newly created pack
over the wire.
And I see from "(or when ...)" part that you do not know what you
are talking about. "push" will not stream existing pack to the
other end without computation, and it never will. It will reuse
existing individual pieces when it can, and having data in a pack
(even without deltifying, or as a suboptimal delta) is much better
for push performance than having the same data in a loose object if
only for this reason, as you do not have to recompress and reencode
it in a different way (loose objects and undelitifed object in pack
are encoded differently).
> ... are you willing to explain it to me?
Hope that the above clarifies.
I've treated this thread as a design discussion, not an education
session, but the above ended up having more education material than
anything that would advance the design.
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html