Because your second step is *BROKEN*.
Think of a case where an earlier commit walker started fetching into that
"server" end, which got newer commits and their associated objects first
and then older ones, and then got killed before reaching to the objects it
already had. In such a case, the commit walker will *not* update the refs
on the server end (and for a very good reason).
After that, the server end would have:
* refs that point at some older commits, all objects from whom are
guaranteed to be in the repository (that's the "ref" guarantee);
* newer commits and their objects, but if you follow them you will hit
some objects that are *NOT* in the repository.
Now imagine starting your broken procedure to serve clients from such a
repository. Your second step would cause the server to attempt to pack
the difference from the latter classes of incomplete objects and makes the
pack generation fail.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html