This project is mirrored from https://github.com/git/git. Updated .
  1. 11 Dec, 2012 1 commit
    • Junio C Hamano's avatar
      fetch: ignore wildcarded refspecs that update local symbolic refs · f8fb971e
      Junio C Hamano authored
      In a repository cloned from somewhere else, you typically have a
      symbolic ref refs/remotes/origin/HEAD pointing at the 'master'
      remote-tracking ref that is next to it.  When fetching into such a
      repository with "git fetch --mirror" from another repository that
      was similarly cloned, the implied wildcard refspec refs/*:refs/*
      will end up asking to update refs/remotes/origin/HEAD with the
      object at refs/remotes/origin/HEAD at the remote side, while asking
      to update refs/remotes/origin/master the same way.  Depending on the
      order the two updates happen, the latter one would find that the
      value of the ref before it is updated has changed from what the code
      expects.
      
      When the user asks to update the underlying ref via the symbolic ref
      explicitly without using a wildcard refspec, e.g. "git fetch $there
      refs/heads/master:refs/remotes/origin/HEAD", we should still let him
      do so, but when expanding wildcard refs, it will result in a more
      intuitive outcome if we simply ignore local symbolic refs.
      
      As the purpose of the symbolic ref refs/remotes/origin/HEAD is to
      follow the ref it points at (e.g. refs/remotes/origin/master), its
      value would change when the underlying ref is updated.
      
      Earlier commit da3efdb1 (receive-pack: detect aliased updates which
      can occur with symrefs, 2010-04-19) fixed a similar issue for "git
      push".
      Signed-off-by: default avatarJunio C Hamano <[email protected]>
      f8fb971e