Re: unclear documentation of git fetch --tags option and tagopt config
乙酸鋰 writes: > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: unclear documentation of git fetch --tags option and tagopt config
From: "Junio C Hamano" Sent: Thursday, December 13, 2012 6:44 PM 乙酸鋰 writes: 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 -- What would be the best way of updating the documentation to clarify the point? Given ch3cooli's previous surprise. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: unclear documentation of git fetch --tags option and tagopt config
"Philip Oakley" writes: > What would be the best way of updating the documentation to clarify the > point? Given ch3cooli's previous surprise. Oh, thanks for bringing it up. I was about to start another message that begins with "Having said all that..." ;-) I think the entire paragraph should be rewritten. The first long sentence explains that you will get tags that point at the branches and other stuff you follow by default, so there is no need to explicitly ask for tags most of the time. While that is true, it is secondary in describing what "--tags" is about. It is to grab all tags and store them locally, and that needs to come at the very beginning. And that auto-following behaviour is already described in the previous entry for -n/--no-tags. So how about something like this: This is a short-hand for giving "refs/tags/*:refs/tags/*" refspec from the command line, to ask all tags to be fetched and stored locally. Note that it is deliberate that the above does not mention tagopt configuration at all. The variable was primarily meant to be used with --no-tags, so that with this: [remote "origin"] tagopt = --no-tags you can "git fetch origin" to keep up with the development on branches without having to fetch tags from there. Fetching tags and only tags from a remote is almost always not what you want; in other words, remote."origin".tagopt set to --tags is a misconfiguration 99% of the time, unless you are only interested in following tagged release points. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html