threads / discuss / 53379

--no-tags doesn't appear to be working as intended

Subject: --no-tags doesn't appear to be working as intended

## tl;dr

3 messages between May 2, 2020 and May 3, 2020.

replies: 2people: 2as markdown or json

Ben Denhartog· May 2, 2020, 21:01 UTC · lore
From the documentation, it would appear that `--no-tags` should avoid pulling tags, even if they point to refs which match the refspec being fetched:
>        -n, --no-tags
>            By default, tags that point at objects that are downloaded from the remote repository are fetched and
>            stored locally. This option disables this automatic tag following. The default behavior for a remote may
>            be specified with the remote.<name>.tagOpt setting. See git-config(1). 
This, however, does not appear to be the case: Either using the `--no-tags` flag on the command line directly or setting `remote.<name>.tagopt = --no-tags` appears to be ignored when running `git-fetch`. This can be recreated simply:

``` # /tmp/a will be our "origin" # /tmp/b will be our "fork" mkdir /tmp/{a,b}

# set up the origin git -C /tmp/a init echo "Hello, world" >/tmp/a/README git -C /tmp/a add README git -C /tmp/a commit -m 'initial commit' git -C /tmp/a tag 0.0.1 HEAD

# set up the fork git -C /tmp/b init git -C /tmp/b remote add -f --no-tags upstream file:///tmp/a ```

You'll see the 0.0.1 tag being fetched. You can delete it all you want, set the `remote.upstream.tagopt = --no-tags`, etc -- it will always be pulled. This is the opposite behavior I would expect based on the available documentation and discussion around the tag in the mailing list.
-- 
  Ben Denhartog
  ben@sudoforge.com
Jeff King· May 3, 2020, 06:54 UTC · re: Ben Denhartog · lore

Re: --no-tags doesn't appear to be working as intended

On Sat, May 02, 2020 at 02:01:35PM -0700, Ben Denhartog wrote:
Show 10 quoted lines
> # set up the fork
> git -C /tmp/b init
> git -C /tmp/b remote add -f --no-tags upstream file:///tmp/a
> ```
> 
> You'll see the 0.0.1 tag being fetched. You can delete it all you
> want, set the `remote.upstream.tagopt = --no-tags`, etc -- it will
> always be pulled. This is the opposite behavior I would expect based
> on the available documentation and discussion around the tag in the
> mailing list.
I don't see that behavior. I get:
  $ git -C /tmp/b remote add -f --no-tags upstream file:///tmp/a
  Updating upstream
  remote: Enumerating objects: 3, done.
  remote: Counting objects: 100% (3/3), done.
  remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
  Unpacking objects: 100% (3/3), 197 bytes | 197.00 KiB/s, done.
  From file:///tmp/a
   * [new branch]      master     -> upstream/master

Is it possible you have some other config that might be conflicting (e.g., extra refspecs that ask to transfer tags)? What does "git config --list --show-origin" say?

-Peff
Ben Denhartog· May 3, 2020, 18:27 UTC · re: Jeff King · lore

Re: --no-tags doesn't appear to be working as intended

Gah, sorry for the erroneous bug report, this was user error.
This was caused by having `fetch.prunetags = true` in my user-scoped conffile. As per the documentation from `git-fetch`:

``` The --prune-tags option is equivalent to having refs/tags/*:refs/tags/* declared in the refspecs of the remote. This can lead to some seemingly strange interactions:

           # These both fetch tags
           $ git fetch --no-tags origin 'refs/tags/*:refs/tags/*'
           $ git fetch --no-tags --prune-tags origin
       The reason it doesn’t error out when provided without --prune or its config versions is for flexibility of the configured versions, and to maintain a 1=1 mapping between what the command line flags
       do, and what the configuration versions do.
```
-- 
  Ben Denhartog
  ben@sudoforge.com

On Sat, May 2, 2020, at 23:54, Jeff King wrote:
> On Sat, May 02, 2020 at 02:01:35PM -0700, Ben Denhartog wrote:
> 
> > # set up the fork
> > git -C /tmp/b init
> > git -C /tmp/b remote add -f --no-tags upstream file:///tmp/a
> > ```
> > 
> > You'll see the 0.0.1 tag being fetched. You can delete it all you
> > want, set the `remote.upstream.tagopt = --no-tags`, etc -- it will
> > always be pulled. This is the opposite behavior I would expect based
> > on the available documentation and discussion around the tag in the
> > mailing list.
> 
> I don't see that behavior. I get:
> 
>   $ git -C /tmp/b remote add -f --no-tags upstream file:///tmp/a
>   Updating upstream
>   remote: Enumerating objects: 3, done.
>   remote: Counting objects: 100% (3/3), done.
>   remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
>   Unpacking objects: 100% (3/3), 197 bytes | 197.00 KiB/s, done.
>   From file:///tmp/a
>    * [new branch]      master     -> upstream/master
> 
> Is it possible you have some other config that might be conflicting
> (e.g., extra refspecs that ask to transfer tags)? What does "git config
> --list --show-origin" say?
> 
> -Peff
>

← back to recent threads