• M
    fetch --prune: prune only based on explicit refspecs · 0838bf47
    Michael Haggerty 提交于
    The old behavior of "fetch --prune" was to prune whatever was being
    fetched.  In particular, "fetch --prune --tags" caused tags not only
    to be fetched, but also to be pruned.  This is inappropriate because
    there is only one tags namespace that is shared among the local
    repository and all remotes.  Therefore, if the user defines a local
    tag and then runs "git fetch --prune --tags", then the local tag is
    deleted.  Moreover, "--prune" and "--tags" can also be configured via
    fetch.prune / remote.<name>.prune and remote.<name>.tagopt, making it
    even less obvious that an invocation of "git fetch" could result in
    tag lossage.
    
    Since the command "git remote update" invokes "git fetch", it had the
    same problem.
    
    The command "git remote prune", on the other hand, disregarded the
    setting of remote.<name>.tagopt, and so its behavior was inconsistent
    with that of the other commands.
    
    So the old behavior made it too easy to lose tags.  To fix this
    problem, change "fetch --prune" to prune references based only on
    refspecs specified explicitly by the user, either on the command line
    or via remote.<name>.fetch.  Thus, tags are no longer made subject to
    pruning by the --tags option or the remote.<name>.tagopt setting.
    
    However, tags *are* still subject to pruning if they are fetched as
    part of a refspec, and that is good.  For example:
    
    * On the command line,
    
          git fetch --prune 'refs/tags/*:refs/tags/*'
    
      causes tags, and only tags, to be fetched and pruned, and is
      therefore a simple way for the user to get the equivalent of the old
      behavior of "--prune --tag".
    
    * For a remote that was configured with the "--mirror" option, the
      configuration is set to include
    
          [remote "name"]
                  fetch = +refs/*:refs/*
    
      , which causes tags to be subject to pruning along with all other
      references.  This is the behavior that will typically be desired for
      a mirror.
    Signed-off-by: NMichael Haggerty <mhagger@alum.mit.edu>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    0838bf47
fetch.c 31.4 KB