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

Re: Tags auto fetched by "git fetch origin" but not "git fetch origin main"

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 29, 2024, 22:38 UTC
Message-ID
<xmqqjzfzt0nu.fsf@gitster.g>
In-Reply-To
<ZtD0kJU_OdBBktZ2@tapette.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
Show 9 quoted lines
> But the `--tags` option says this:
>
>   Fetch all tags from the remote (i.e., fetch remote tags refs/tags/* into
>   local tags with the same name), in addition to whatever else would
>   otherwise be fetched. Using this option alone does not subject tags to
>   pruning, even if --prune is used (though tags may be pruned anyway if
>   they are also the destination of an explicit refspec; see --prune).
>
> That implies that all tags are fetched.

That is stronger than "implies", I would think. Indeed I know from the code inspection that the auto-following only triggers when neither --tags or --no-tags option is given, i.e. builtin/fetch.c has this:

	if (tags == TAGS_DEFAULT && autotags)
		transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");

where the variable tags is initialized to TAGS_DEFAULT, --tags/--no-tags sets it to TAGS_SET or TAGS_UNSET, and autotags is incremented only if a refspec we use has right hand side after the colon, i.e. stores what we fetched in our refs/ namespace.

> I think we need somebody to test things and clarify the documentation.
Done ;-)
> In addition, it might be useful to add a `--relevant-tags` option or

A similar option is called "--follow-tags" on the "git push" side. I _think_ it is just the matter of adding the option and have it set the tags variable back to TAGS_DEFAULT, i.e.

diff --git c/builtin/fetch.c w/builtin/fetch.c
index c297569a47..f22c00a39d 100644
--- c/builtin/fetch.c
+++ w/builtin/fetch.c
@@ -2186,6 +2186,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 			    N_("fetch all tags and associated objects"), TAGS_SET),
 		OPT_SET_INT('n', NULL, &tags,
 			    N_("do not fetch all tags (--no-tags)"), TAGS_UNSET),
+		OPT_SET_INT(0, "follow-tags", &tags,
+			    N_("auto-follow tags"), TAGS_DEFAULT)),
 		OPT_INTEGER('j', "jobs", &max_jobs,
 			    N_("number of submodules fetched in parallel")),
 		OPT_BOOL(0, "prefetch", &prefetch,


but I didn't look too deeply into it.  It needs compile testing,
documentation updates and new teststo cover the behaviour.

Thanks.
Previous: brian m. carlsonNext: Yukai Chou
Message 5 of 6 in “Tags auto fetched by "git fetch origin" but not "git fetch origin main"”
  1. Yukai ChouAug 28, 2024
  2. brian m. carlsonAug 29, 2024
  3. Junio C HamanoAug 29, 2024
  4. brian m. carlsonAug 29, 2024
  5. Junio C HamanoAug 29, 2024
  6. Yukai ChouAug 29, 2024

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.