Re: unclear documentation of git fetch --tags option and tagopt config
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 13, 2012, 18:44 UTC
- Message-ID
- <7v7golzta8.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <CAHtLG6Ti7yPFfhTb2qfSKE1+5n4Ftey4DQeqpm3SSL-bOfspUg@mail.gmail.com>
乙酸鋰 <ch3cooli@gmail.com> writes:
Show 6 quoted lines
> With git fetch --tags > or remote.origin.tagopt = --tags > git fetch only fetches tags, but not branches. > Current documentation does not mention that no branches are fetched / > pulled when --tags option or remote.origin.tagopt = --tags is > specified.
In the canonical form you spell out what you want to fetch from where, and a lazy "git fetch" or "git fetch origin" that does not specify what are to be fetched are the special cases. Because they do not say what to fetch, they would become a no-op, which would not be very useful, if there is no special casing for them. Instead, they use sensible default, taking refspec from the configuration variable remote.$name.fetch.
Giving refspecs or the "--tags" option from the command line is a way to explicitly override this default, hence:
$ git fetch origin HEAD
only fetches the history leading to the commit at HEAD at the remote, ignoring the configured refspecs. As "--tags" is a synonym to "refs/tags/*:refs/tags/*", "git fetch --tags origin" tells us to ignore refspecs and grab only the tags, i.e.:
$ git fetch origin "refs/tags/*:refs/tags/*"
which does not grab any branches.
You can of course do:
$ git fetch --tags origin refs/heads/master:refs/remotes/origin/master