On Mon, Jul 8, 2013 at 2:30 PM, Jeff King <peff@xxxxxxxx> wrote: > Subject: [PATCH] clone: drop connectivity check for local clones > > Commit 0433ad1 (clone: run check_everything_connected, > 2013-03-25) added the same connectivity check to clone that > we use for fetching. The intent was to provide enough safety > checks that "git clone git://..." could be counted on to > detect bit errors and other repo corruption, and not > silently propagate them to the clone. > > For local clones, this turns out to be a bad idea, for two > reasons: > > 1. Local clones use hard linking (or even shared object > stores), and so complete far more quickly. The time > spent on the connectivity check is therefore > proportionally much more painful. There's also byte-to-byte copy when system does not support hardlinks (or the user does not want it) but I guess it's safe to trust the OS to copy correctly in most cases. > 2. Local clones do not actually meet our safety guarantee > anyway. The connectivity check makes sure we have all > of the objects we claim to, but it does not check for > bit errors. We will notice bit errors in commits and > trees, but we do not load blob objects at all. Whereas > over the pack transport, we actually recompute the sha1 > of each object in the incoming packfile; bit errors > change the sha1 of the object, which is then caught by > the connectivity check. We used to, before d21c463 (fetch/receive: remove over-pessimistic connectivity check - 2012-03-15). But back then we did not even do connectivity check in clone. > This patch drops the connectivity check in the local case. > Note that we have to revert the changes from 0433ad1 to > t5710, as we no longer notice the corruption during clone. > > We could go a step further and provide a "verify even local > clones" option, but it is probably not worthwhile. You can > already spell that as "cd foo.git && git fsck && git clone ." > or as "git clone --no-local foo.git". Faster clones make everybody happy :-) -- Duy -- 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