Re: [PATCH] fetch: document that pruning happens before fetching
- From
Jeff King <peff@peff.net>
- Date
- Jun 14, 2016, 06:17 UTC
- Message-ID
- <20160614061752.GA11935@sigill.intra.peff.net>
- In-Reply-To
- <CA+P7+xpk6HqeJfUcAkpTbW_hO6dyjanXoqaaKqdTU363n=-Stw@mail.gmail.com>
On Mon, Jun 13, 2016 at 11:14:36PM -0700, Jacob Keller wrote:
Show 29 quoted lines
> On Mon, Jun 13, 2016 at 4:58 PM, Jeff King <peff@peff.net> wrote: > > This was changed in 10a6cc8 (fetch --prune: Run prune before > > fetching, 2014-01-02), but it seems that nobody in that > > discussion realized we were advertising the "after" > > explicitly. > > > > Signed-off-by: Jeff King <peff@peff.net> > > --- > > I include myself in that "nobody" of course. :) > > > > Documentation/fetch-options.txt | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt > > index 036edfb..b05a834 100644 > > --- a/Documentation/fetch-options.txt > > +++ b/Documentation/fetch-options.txt > > @@ -52,7 +52,7 @@ ifndef::git-pull[] > > > > -p:: > > --prune:: > > - After fetching, remove any remote-tracking references that no > > + Before fetching, remove any remote-tracking references that no > > longer exist on the remote. Tags are not subject to pruning > > if they are fetched only because of the default tag > > auto-following or due to a --tags option. However, if tags > > What's the difference in behavior due to pruning before instead of > after? Curious. It seems like pruning after would make more sense?
See 10a6cc8. :)
Basically, you have to prune first to make way for new incoming refs when there is a D/F conflict.
The downside is that there is a moment where objects may be unreferenced (e.g., if upstream moved "foo" to "bar", we delete "foo" and _then_ create "bar"). And due to the way refs are stored, we do not keep even a reflog for the deleted ref in the interim.
-Peff