On Fri, Jan 31, 2025 at 04:30:32PM +0100, Toon Claes wrote: > In clone.c we call refspec_ref_prefixes() to copy the fetch refspecs > from the `remote->fetch` refspec into `ref_prefixes` of > `transport_ls_refs_options`. Afterward we add the tags prefix s/Afterward/&s/ > diff --git a/builtin/clone.c b/builtin/clone.c > index d652682494d0d27dd73cd0585e28b23f2883786d..7ab156ac00240de89baca6533ed2541839286fc4 100644 > --- a/builtin/clone.c > +++ b/builtin/clone.c > @@ -1375,14 +1365,15 @@ int cmd_clone(int argc, > transport->smart_options->check_self_contained_and_connected = 1; > > strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); > + > + if (option_tags || option_branch) > + refspec_append(&remote->fetch, TAG_REFSPEC); It's a bit surprising that we also do this with `option_branch`, which only seems to indicate which branch git-clone(1) is supposed to check out. But in fact, the documentation mentions that it may also be used to check out a tag. Principle of least surprise at its best. In any case, I think it would be nice to have a comment here explaining why this is the correct thing to do. Patrick