Skip to content
  • Jeff King's avatar
    clone: drop connectivity check for local clones · 125a05fd
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    Commit 0433ad12 (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.
    
      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.
    
    This patch drops the connectivity check in the local case.
    Note that we have to revert the changes from 0433ad12
    
     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".
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    125a05fd