• Jeff King's avatar
    clone: always fetch remote HEAD · c1921c18
    Jeff King authored
    In most cases, fetching the remote HEAD explicitly is
    unnecessary. It's just a symref pointing to a branch which
    we are already fetching, so we will already ask for its sha1.
    
    However, if the remote has a detached HEAD, things are less
    certain. We do not ask for HEAD's sha1, but we do try to
    write it into a local detached HEAD. In most cases this is
    fine, as the remote HEAD is pointing to some part of the
    history graph that we will fetch via the refs.
    
    But if the remote HEAD points to an "orphan" commit (one
    which was is not an ancestor of any refs), then we will not
    have the object, and update_ref will complain when we try to
    write the detached HEAD, aborting the whole clone.
    
    This patch makes clone always explicitly ask the remote for
    the sha1 of its HEAD commit. In the non-detached case, this
    is a no-op, as we were going to ask for that sha1 anyway. In
    the regular detached case, this will add an extra "want" to
    the protocol negotiation, but will not change the history
    that gets sent. And in the detached orphan case, we will
    fetch the orphaned history so that we can write it into our
    local detached HEAD.
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    c1921c18
t5707-clone-detached.sh 1.92 KB