git fetch: how to just pull a pattern of tags

Issue

I want sync all tags which name is ver*, I tried following command but it fetched tags which name is not ver*

git fetch --tags --prune --prune-tags --force origin '+refs/tags/ver*:refs/tags/ver*'

Any idea?

Solution

Two points :

  • --tags is equivalent to adding refs/tags/*:refs/tags/* on your command line, and will fetch all tags

You should drop that option

  • by default, git fetch will download any tag that points to any commit in the history of the refs you fetch
    e.g: if you have a osexp-test tag pointing to a commit which is part of the history of ver-1.1, then that tag will also be fetched.

To cancel this beavior, use the --no-tags option

git fetch --no-tags --prune --prune-tags origin '+refs/tags/ver*:refs/tags/ver*'

The default behavior is documented in git help tag (second paragraph of the Description section) :

By default, any tag that points into the histories being fetched is also fetched; the effect is to fetch tags that point at branches that you are interested in. This default behavior can be changed by using the --tags or --no-tags options or by configuring remote.<name>.tagOpt.

Answered By – LeGEC

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published