• J
    symbolic ref: refuse non-ref targets in HEAD · afe5d3d5
    Jeff King 提交于
    When calling "git symbolic-ref" it is easy to forget that
    the target must be a fully qualified ref. E.g., you might
    accidentally do:
    
      $ git symbolic-ref HEAD master
    
    Unfortunately, this is very difficult to recover from,
    because the bogus contents of HEAD make git believe we are
    no longer in a git repository (as is_git_dir explicitly
    checks for "^refs/heads/" in the HEAD target). So
    immediately trying to fix the situation doesn't work:
    
      $ git symbolic-ref HEAD refs/heads/master
      fatal: Not a git repository
    
    and one is left editing the .git/HEAD file manually.
    
    Furthermore, one might be tempted to use symbolic-ref to set
    up a detached HEAD:
    
      $ git symbolic-ref HEAD `git rev-parse HEAD`
    
    which sets up an even more bogus HEAD:
    
      $ cat .git/HEAD
      ref: 1a9ace4f2ad4176148e61b5a85cd63d5604aac6d
    
    This patch introduces a small safety valve to prevent the
    specific case of anything not starting with refs/heads/ to
    go into HEAD. The scope of the safety valve is intentionally
    very limited, to make sure that we are not preventing any
    behavior that would otherwise be valid (like pointing a
    different symref than HEAD outside of refs/heads/).
    Signed-off-by: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    afe5d3d5
t1401-symbolic-ref.sh 1.0 KB