git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] fetch: clobber existing tags with --prune-tags

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 21, 2026, 18:26 UTC
Message-ID
<xmqq1phdavik.fsf@gitster.g>
In-Reply-To
<b444fa7af9f39960652209143c9845a47efd58e1.1771187016.git.gitgitgadget@gmail.com>
"Orgad Shaneh via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
>
> This was documented but not implemented.
And instead what did the command do / how did the command behave?

It also is curious when it was "broken". It could be that it was broken from day one when 97716d21 (fetch: add a --prune-tags option and fetch.pruneTags config, 2018-02-09) was written, c1a7902f (Merge branch 'ab/fetch-prune', 2018-03-06) merged it, and Git 2.17 was shipped with it, but knowing Ævar (by the way where is he these days???), I somehow doubt it.

And unless it was broken from day one, we must find out if the change in behaviour was deliberate, in which case it would be the doucmentation and not the implementation that needs fixing.

Show 35 quoted lines
> In the flag description:
> prune local tags no longer on remote *and clobber changed tags*
>
> In the documentation:
> ... to prune local tags that don't exist on the remote, *and
> force-update those tags that differ*.
> ...
> diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
> index 31df7faf56..4d29043baf 100755
> --- a/t/t5516-fetch-push.sh
> +++ b/t/t5516-fetch-push.sh
> @@ -1092,7 +1092,7 @@ test_force_fetch_tag () {
>  	tag_type_description=$1
>  	tag_args=$2
>  
> -	test_expect_success "fetch will not clobber an existing $tag_type_description without --force" "
> +	test_expect_success "fetch will not clobber an existing $tag_type_description without --force or --prune-tags" "
>  		mk_test testrepo heads/main &&
>  		mk_child testrepo child1 &&
>  		mk_child testrepo child2 &&
> @@ -1108,7 +1108,13 @@ test_force_fetch_tag () {
>  			git -C ../child1 fetch origin '+refs/tags/*:refs/tags/*' &&
>  			git tag $tag_args testTag HEAD^ &&
>  			test_must_fail git -C ../child1 fetch origin tag testTag &&
> -			git -C ../child1 fetch --force origin tag testTag
> +			git -C ../child1 fetch --force origin tag testTag &&
> +			git tag $tag_args testTag HEAD &&
> +			test_must_fail git -C ../child1 fetch origin tag testTag &&
> +			git -C ../child1 fetch --prune-tags origin tag testTag &&
> +			git tag $tag_args testTag HEAD^ &&
> +			test_must_fail git -C ../child1 fetch origin tag testTag &&
> +			git -C ../child1 -c fetch.prunetags=true fetch origin tag testTag
>  		)
>  	"
>  }

None of the steps we see in the added test do not seem to check that --prune-tags does clobber existing tag that no longer exists on the other side. It only checks the "git fetch" command exits with status 0, but does not see if the tag actually went away after the operation is done.

Previous: Orgad ShanehNext: Orgad Shaneh
Message 5 of 9 in “fetch: clobber existing tags with --prune-tags”
  1. 0/2 fetch: clobber existing tags with --prune-tagsOrgad Shaneh via GitGitGadget, Feb 15, 2026
  2. 1/2 fetch: add a test for --force flagOrgad Shaneh via GitGitGadget, Feb 15, 2026
  3. 2/2 fetch: clobber existing tags with --prune-tagsOrgad Shaneh via GitGitGadget, Feb 15, 2026
  4. Orgad ShanehMar 18, 2026
  5. Junio C HamanoMar 21, 2026
  6. Orgad ShanehMar 26, 2026
  7. Orgad ShanehSep 13, 2026
  8. Junio C HamanoSep 13, 2026
  9. Orgad ShanehOct 6, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.