All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Clarify that '--tags' fetches tags only
@ 2011-09-02 21:04 Anatol Pomozov
  2011-09-02 21:18 ` Drew Northup
  2011-09-21 23:52 ` Anatol Pomozov
  0 siblings, 2 replies; 32+ messages in thread
From: Anatol Pomozov @ 2011-09-02 21:04 UTC (permalink / raw)
  To: git; +Cc: Anatol Pomozov

---
 Documentation/fetch-options.txt |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 39d326a..37d2316 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -63,7 +63,8 @@ ifndef::git-pull[]
 	flag lets all tags and their associated objects be
 	downloaded. The default behavior for a remote may be
 	specified with the remote.<name>.tagopt setting. See
-	linkgit:git-config[1].
+	linkgit:git-config[1]. Note that if this option is specified
+	then only tags are fetched, refs under refs/heads/* stay unchanged.
 
 --recurse-submodules[=yes|on-demand|no]::
 	This option controls if and under what conditions new commits of
-- 
1.7.7.rc0.72.g4b5ea.dirty

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-02 21:04 [PATCH] Clarify that '--tags' fetches tags only Anatol Pomozov
@ 2011-09-02 21:18 ` Drew Northup
  2011-09-21 23:52 ` Anatol Pomozov
  1 sibling, 0 replies; 32+ messages in thread
From: Drew Northup @ 2011-09-02 21:18 UTC (permalink / raw)
  To: Anatol Pomozov; +Cc: git

On Fri, 2011-09-02 at 14:04 -0700, Anatol Pomozov wrote:

> -	linkgit:git-config[1].
> +	linkgit:git-config[1]. Note that if this option is specified
> +	then only tags are fetched, refs under refs/heads/* stay unchanged.

Anatol,
Looks like a sane change to me. You might want to check
Documentation/SubmittingPatches in the git repository if you want Junio
to include your patch. It is probably also worth CC-ing those whom did
the previous work on that documentation and the tags code to make sure
your change is correct.

-- 
-Drew Northup
________________________________________________
"As opposed to vegetable or mineral error?"
-John Pescatore, SANS NewsBites Vol. 12 Num. 59

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH] Clarify that '--tags' fetches tags only
  2011-09-02 21:04 [PATCH] Clarify that '--tags' fetches tags only Anatol Pomozov
  2011-09-02 21:18 ` Drew Northup
@ 2011-09-21 23:52 ` Anatol Pomozov
  2011-09-22  0:13   ` Michael Witten
  2011-09-22  1:14   ` [PATCH] Clarify that '--tags' fetches tags only Daniel Johnson
  1 sibling, 2 replies; 32+ messages in thread
From: Anatol Pomozov @ 2011-09-21 23:52 UTC (permalink / raw)
  To: git, gitster; +Cc: computerdruid, Anatol Pomozov

'git fetch --tags' fetches tags only and leaves heads untouched.
Many people are confused by the fact that 'git fetch --tags'
does not fetch heads.

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
---
 Documentation/fetch-options.txt |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 39d326a..37d2316 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -63,7 +63,8 @@ ifndef::git-pull[]
 	flag lets all tags and their associated objects be
 	downloaded. The default behavior for a remote may be
 	specified with the remote.<name>.tagopt setting. See
-	linkgit:git-config[1].
+	linkgit:git-config[1]. Note that if this option is specified
+	then only tags are fetched, refs under refs/heads/* stay unchanged.
 
 --recurse-submodules[=yes|on-demand|no]::
 	This option controls if and under what conditions new commits of
-- 
1.7.7.rc0.72.g4b5ea.dirty

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-21 23:52 ` Anatol Pomozov
@ 2011-09-22  0:13   ` Michael Witten
  2011-09-22  0:49     ` Junio C Hamano
  2011-09-22  1:14   ` [PATCH] Clarify that '--tags' fetches tags only Daniel Johnson
  1 sibling, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-22  0:13 UTC (permalink / raw)
  To: Anatol Pomozov; +Cc: git, gitster, computerdruid

On Wed, Sep 21, 2011 at 23:52, Anatol Pomozov <anatol.pomozov@gmail.com> wrote:
> +       linkgit:git-config[1]. Note that if this option is specified
> +       then only tags are fetched, refs under refs/heads/* stay unchanged.

Note that if this option is specified, then only tags
are fetched; refs under refs/heads/* are not changed.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  0:13   ` Michael Witten
@ 2011-09-22  0:49     ` Junio C Hamano
  2011-09-22  2:01       ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Junio C Hamano @ 2011-09-22  0:49 UTC (permalink / raw)
  To: Michael Witten; +Cc: Anatol Pomozov, git, computerdruid

Michael Witten <mfwitten@gmail.com> writes:

> On Wed, Sep 21, 2011 at 23:52, Anatol Pomozov <anatol.pomozov@gmail.com> wrote:
>> +       linkgit:git-config[1]. Note that if this option is specified
>> +       then only tags are fetched, refs under refs/heads/* stay unchanged.
>
> Note that if this option is specified, then only tags
> are fetched; refs under refs/heads/* are not changed.

Can we improve the wording without singling out refs/heads/* specifically?

I think the updated wording is not desirable for two reasons.

For one thing, for the most newbies, I think refs/remotes/origin/* (not
refs/heads/*) would be the hierarchy that they may expect to get updated
and surprised.

When you give --tags (or any other refspec for that matter; --tags is
merely a short-hand for "refs/tags/*:refs/tags/*") explicitly from the
command line, you are overriding the refspecs configured for the remote,
and all the refs that are _not_ covered by the refspec you gave from the
command line will stay unchanged, not just refs/heads/* but refs under
other hierarchies (like refs/remotes/* and refs/notes/*). 

Once the reader understands that the command line _overrides_ the
configured fetch refspecs, everything else should fall naturally into
place without further explanation.  For example,

	$ git pull origin frotz

would internally invoke "git fetch origin another_branch", and it would
not update any refs for the _same exact reason_ [*1*].  You are giving a
refspec from the command line (in this case, "grab refs/heads/frotz, but
do not store it anywhere"), and it overrides the usual fetch refspec that
may update "+refs/heads/*:refs/remotes/origin/*" (grab all refs at the
origin under refs/heads/ hierarchy, and store in refs/remotes/origin).


[Footnote]

*1* The merging of the result would update the current branch but that is
a natural consequence of "a pull integrates by running either a merge or a
rebase after running a fetch".

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-21 23:52 ` Anatol Pomozov
  2011-09-22  0:13   ` Michael Witten
@ 2011-09-22  1:14   ` Daniel Johnson
  2011-09-30  2:51     ` Peter Shenkin
  1 sibling, 1 reply; 32+ messages in thread
From: Daniel Johnson @ 2011-09-22  1:14 UTC (permalink / raw)
  To: Anatol Pomozov; +Cc: git, gitster

On Wednesday, September 21, 2011 04:52:56 PM Anatol Pomozov wrote:
> @@ -63,7 +63,8 @@ ifndef::git-pull[]
>  	flag lets all tags and their associated objects be
>  	downloaded. The default behavior for a remote may be
>  	specified with the remote.<name>.tagopt setting. See
> -	linkgit:git-config[1].
> +	linkgit:git-config[1]. Note that if this option is specified
> +	then only tags are fetched, refs under refs/heads/* stay unchanged.

I like this clarification. It would be better placed before the note about the 
tagopt setting, as it clarifies the statement before that ("This flag lets all 
tags and their associated objects be downloaded.")

In fact, the optimal solution might be to rework that sentence with the 
clarification from yours, so something like "This flag lets all tags and their 
associated objects be downloaded instead of"...

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  0:49     ` Junio C Hamano
@ 2011-09-22  2:01       ` Michael Witten
  2011-09-22  2:07         ` Michael Witten
  2011-09-22  4:00         ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
  0 siblings, 2 replies; 32+ messages in thread
From: Michael Witten @ 2011-09-22  2:01 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Anatol Pomozov, git, computerdruid

On Thu, Sep 22, 2011 at 00:49, Junio C Hamano <gitster@pobox.com> wrote:
> --tags is merely a short-hand for "refs/tags/*:refs/tags/*")
> explicitly from the command line

[Disclaimer: I don't know the code or the semantics]

Why not just use that explanation?

  This option is merely a short-hand for writing
  the refspec `refs/tags/*:refs/tags/*'; consequently,
  using this option overrides any default refspec that
  would be used if no refspec were provided on the
  command line. That is,

    git fetch --tags origin frotz

  is equivalent to:

    git fetch origin frotz 'refs/tags/*:refs/tags/*'

In fact, if the command line parsing performed by `git fetch'
is reasonably intelligent, then it might be worthwhile
to relocate `--tags' in the example:

  That is,

    git fetch origin frotz --tags

  is equivalent to:

    git fetch origin frotz 'refs/tags/*:refs/tags/*'

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  2:01       ` Michael Witten
@ 2011-09-22  2:07         ` Michael Witten
  2011-09-22  3:13           ` Andrew Ardill
  2011-09-22  4:00         ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
  1 sibling, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-22  2:07 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Anatol Pomozov, git, computerdruid

On Thu, Sep 22, 2011 at 02:01, Michael Witten <mfwitten@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 00:49, Junio C Hamano <gitster@pobox.com> wrote:
>> --tags is merely a short-hand for "refs/tags/*:refs/tags/*")
>> explicitly from the command line
>
> [Disclaimer: I don't know the code or the semantics]
>
> Why not just use that explanation?
>
>  This option is merely a short-hand for writing
>  the refspec `refs/tags/*:refs/tags/*'; consequently,
>  using this option overrides any default refspec that
>  would be used if no refspec were provided on the
>  command line. That is,
>
>    git fetch --tags origin frotz
>
>  is equivalent to:
>
>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>
> In fact, if the command line parsing performed by `git fetch'
> is reasonably intelligent, then it might be worthwhile
> to relocate `--tags' in the example:
>
>  That is,
>
>    git fetch origin frotz --tags
>
>  is equivalent to:
>
>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>

Maybe this is less confusing for the example:

  That is,

    git fetch origin --tags
    git fetch origin frotz --tags bar

  are equivalent to:

    git fetch origin 'refs/tags/*:refs/tags/*'
    git fetch origin frotz 'refs/tags/*:refs/tags/*' bar

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  2:07         ` Michael Witten
@ 2011-09-22  3:13           ` Andrew Ardill
  2011-09-22  3:24             ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Andrew Ardill @ 2011-09-22  3:13 UTC (permalink / raw)
  To: Michael Witten; +Cc: Junio C Hamano, Anatol Pomozov, git, computerdruid

On 22 September 2011 12:07, Michael Witten <mfwitten@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 02:01, Michael Witten <mfwitten@gmail.com> wrote:
>> On Thu, Sep 22, 2011 at 00:49, Junio C Hamano <gitster@pobox.com> wrote:
>>> --tags is merely a short-hand for "refs/tags/*:refs/tags/*")
>>> explicitly from the command line
>>
>> [Disclaimer: I don't know the code or the semantics]
>>
>> Why not just use that explanation?
>>
>>  This option is merely a short-hand for writing
>>  the refspec `refs/tags/*:refs/tags/*'; consequently,
>>  using this option overrides any default refspec that
>>  would be used if no refspec were provided on the
>>  command line. That is,
>>
>>    git fetch --tags origin frotz
>>
>>  is equivalent to:
>>
>>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>>
>> In fact, if the command line parsing performed by `git fetch'
>> is reasonably intelligent, then it might be worthwhile
>> to relocate `--tags' in the example:
>>
>>  That is,
>>
>>    git fetch origin frotz --tags
>>
>>  is equivalent to:
>>
>>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>>
>
> Maybe this is less confusing for the example:
>
>  That is,
>
>    git fetch origin --tags
>    git fetch origin frotz --tags bar
>
>  are equivalent to:
>
>    git fetch origin 'refs/tags/*:refs/tags/*'
>    git fetch origin frotz 'refs/tags/*:refs/tags/*' bar

This will only help people who understand that tags are just refs
stored in refs/tags, and who understand the 'ref:ref' syntax. I think
it is a good example to have, but people can understand the process
and results of 'pulling/fetching a tag' without necessarily needing to
know that tags are stored somewhere, or knowing the exact fetch
mechanism. If these need to be documented, it should be in the
appropriate place (which I don't think is here).

I think we are skirting around the real issue, and that is that
pulling tags will often grab objects that are *meant* to be on a
remote branch (from the user's perspective) but that appear to be
hanging because the remote branch ref was not updated at the same
time. Perhaps an example or explanation of why this is the case would
be more useful?

Maybe:

Note that if this option is specified, then only tags
are fetched. No other refs, such as a remote tracking
branch, will be updated, even if it has been updated
on the remote end.

extra info on how this option is merely a short-hand for writing the
refspec `refs/tags/*:refs/tags/* could go here


Regards,
Andrew

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  3:13           ` Andrew Ardill
@ 2011-09-22  3:24             ` Michael Witten
  2011-09-22  3:39               ` [PATCH] Docs: Clarify the --tags option of `git fetch' Michael Witten
  2011-09-22  4:28               ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
  0 siblings, 2 replies; 32+ messages in thread
From: Michael Witten @ 2011-09-22  3:24 UTC (permalink / raw)
  To: Andrew Ardill; +Cc: Junio C Hamano, Anatol Pomozov, git, computerdruid

On Thu, Sep 22, 2011 at 03:13, Andrew Ardill <andrew.ardill@gmail.com> wrote:
> On 22 September 2011 12:07, Michael Witten <mfwitten@gmail.com> wrote:
>> On Thu, Sep 22, 2011 at 02:01, Michael Witten <mfwitten@gmail.com> wrote:
>>> On Thu, Sep 22, 2011 at 00:49, Junio C Hamano <gitster@pobox.com> wrote:
>>>> --tags is merely a short-hand for "refs/tags/*:refs/tags/*")
>>>> explicitly from the command line
>>>
>>> [Disclaimer: I don't know the code or the semantics]
>>>
>>> Why not just use that explanation?
>>>
>>>  This option is merely a short-hand for writing
>>>  the refspec `refs/tags/*:refs/tags/*'; consequently,
>>>  using this option overrides any default refspec that
>>>  would be used if no refspec were provided on the
>>>  command line. That is,
>>>
>>>    git fetch --tags origin frotz
>>>
>>>  is equivalent to:
>>>
>>>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>>>
>>> In fact, if the command line parsing performed by `git fetch'
>>> is reasonably intelligent, then it might be worthwhile
>>> to relocate `--tags' in the example:
>>>
>>>  That is,
>>>
>>>    git fetch origin frotz --tags
>>>
>>>  is equivalent to:
>>>
>>>    git fetch origin frotz 'refs/tags/*:refs/tags/*'
>>>
>>
>> Maybe this is less confusing for the example:
>>
>>  That is,
>>
>>    git fetch origin --tags
>>    git fetch origin frotz --tags bar
>>
>>  are equivalent to:
>>
>>    git fetch origin 'refs/tags/*:refs/tags/*'
>>    git fetch origin frotz 'refs/tags/*:refs/tags/*' bar
>
> This will only help people who understand that tags are just refs
> stored in refs/tags, and who understand the 'ref:ref' syntax. I think
> it is a good example to have, but people can understand the process
> and results of 'pulling/fetching a tag' without necessarily needing to
> know that tags are stored somewhere, or knowing the exact fetch
> mechanism. If these need to be documented, it should be in the
> appropriate place (which I don't think is here).
>
> I think we are skirting around the real issue, and that is that
> pulling tags will often grab objects that are *meant* to be on a
> remote branch (from the user's perspective) but that appear to be
> hanging because the remote branch ref was not updated at the same
> time. Perhaps an example or explanation of why this is the case would
> be more useful?
>
> Maybe:
>
> Note that if this option is specified, then only tags
> are fetched. No other refs, such as a remote tracking
> branch, will be updated, even if it has been updated
> on the remote end.
>
> extra info on how this option is merely a short-hand for writing the
> refspec `refs/tags/*:refs/tags/* could go here

Junio just explained why your description is inadequate and confusing.

There's so much confusion around git exactly because people are always
trying to hide just WTF is going on (especially by using TERRIBLE
terms like `branch'; see my numerous discussions).

If I were a newbie and were to read the text that I just proferred as
a clarification of --tags, then I would next look up just WTF a
refspec is, and then a branch, and then...

You see? That's exactly how it should work. People should be given
descriptions that arm them with the terms necessary to look up more
information. We need to stop writing documentation for that
hypothetical idiot who doesn't know his ass from his own face. We need
to cater to those people who intend to read documentation for the
purpose of understanding the system---not for the purpose of gettin'
shit dun with any half-baked notion that is good enough for the most
simplistic situation.

I'm sending in a patch presently.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH] Docs: Clarify the --tags option of `git fetch'
  2011-09-22  3:24             ` Michael Witten
@ 2011-09-22  3:39               ` Michael Witten
  2011-09-22  3:48                 ` Michael Witten
  2011-09-22  4:28               ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
  1 sibling, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-22  3:39 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

See the discussion starting here:

  [PATCH] Clarify that '--tags' fetches tags only
  Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
  http://thread.gmane.org/gmane.comp.version-control.git/180636

Suggested-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Michael Witten <mfwitten@gmail.com>
---
 Documentation/fetch-options.txt |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 39d326a..fb743fa 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -61,9 +61,24 @@ ifndef::git-pull[]
 	objects reachable from the branch heads that are being
 	tracked will not be fetched by this mechanism.  This
 	flag lets all tags and their associated objects be
-	downloaded. The default behavior for a remote may be
-	specified with the remote.<name>.tagopt setting. See
-	linkgit:git-config[1].
+	downloaded.
++
+This option is merely a short-hand for writing the
+refspec `refs/tags/\*:refs/tags/\*'; consequently,
+using this option overrides any default refspec that
+would be used if no refspec were provided on the
+command line. That is,
++
+	git fetch origin --tags
+	git fetch origin frotz --tags bar
++
+are equivalent to:
++	
+	git fetch origin 'refs/tags/*:refs/tags/*'
+	git fetch origin frotz 'refs/tags/*:refs/tags/*' bar
++
+The default behavior for a remote may be specified with
+the remote.<name>.tagopt setting. See linkgit:git-config[1].
 
 --recurse-submodules[=yes|on-demand|no]::
 	This option controls if and under what conditions new commits of
-- 
1.7.6.409.ge7a85

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH] Docs: Clarify the --tags option of `git fetch'
  2011-09-22  3:39               ` [PATCH] Docs: Clarify the --tags option of `git fetch' Michael Witten
@ 2011-09-22  3:48                 ` Michael Witten
  0 siblings, 0 replies; 32+ messages in thread
From: Michael Witten @ 2011-09-22  3:48 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

On Thu, Sep 22, 2011 at 03:39, Michael Witten <mfwitten@gmail.com> wrote:
> ...
> +This option is merely a short-hand for writing the
> ...

Junio, make that `shorthand', if you please.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  2:01       ` Michael Witten
  2011-09-22  2:07         ` Michael Witten
@ 2011-09-22  4:00         ` Junio C Hamano
  2011-09-22  4:17           ` [PATCH v2] Docs: Clarify the --tags option of `git fetch' Michael Witten
  1 sibling, 1 reply; 32+ messages in thread
From: Junio C Hamano @ 2011-09-22  4:00 UTC (permalink / raw)
  To: Michael Witten; +Cc: Anatol Pomozov, git, computerdruid

Michael Witten <mfwitten@gmail.com> writes:

>   That is,
>
>     git fetch origin frotz --tags
>
>   is equivalent to:
>
>     git fetch origin frotz 'refs/tags/*:refs/tags/*'

No matter what you do, please do not introduce a bad example that violates
the usual command line syntax convention to have subcommand (e.g. fetch),
options meant for the subcommand (e.g. --tags) and then other arguments.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH v2] Docs: Clarify the --tags option of `git fetch'
  2011-09-22  4:00         ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
@ 2011-09-22  4:17           ` Michael Witten
  0 siblings, 0 replies; 32+ messages in thread
From: Michael Witten @ 2011-09-22  4:17 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

On Wed, 21 Sep 2011 21:00:51 -0700, Junio C Hamano wrote:

> Michael Witten <mfwitten@gmail.com> writes:
>
>>   That is,
>>
>>     git fetch origin frotz --tags
>>
>>   is equivalent to:
>>
>>     git fetch origin frotz 'refs/tags/*:refs/tags/*'
>
> No matter what you do, please do not introduce a bad example that violates
> the usual command line syntax convention to have subcommand (e.g. fetch),
> options meant for the subcommand (e.g. --tags) and then other arguments.

Too bad; I think it really supplements the description well.

In any case:

  * The example has been changed as per your wish.
  * `short-hand' has been changed to `shorthand'.
  * Trailing whitespace has been removed from a line.

8<-----------8<-----------8<-----------8<-----------8<-----------8<-----------

See the discussion starting here:

  [PATCH] Clarify that '--tags' fetches tags only
  Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
  http://thread.gmane.org/gmane.comp.version-control.git/180636

Suggested-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Michael Witten <mfwitten@gmail.com>
---
 Documentation/fetch-options.txt |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 39d326a..da594bd 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -61,9 +61,24 @@ ifndef::git-pull[]
 	objects reachable from the branch heads that are being
 	tracked will not be fetched by this mechanism.  This
 	flag lets all tags and their associated objects be
-	downloaded. The default behavior for a remote may be
-	specified with the remote.<name>.tagopt setting. See
-	linkgit:git-config[1].
+	downloaded.
++
+This option is merely a shorthand for writing the
+refspec `refs/tags/\*:refs/tags/\*'; consequently,
+using this option overrides any default refspec that
+would be used if no refspec were provided on the
+command line. That is,
++
+	git fetch origin --tags
+	git fetch origin --tags frotz
++
+are equivalent to:
++
+	git fetch origin 'refs/tags/*:refs/tags/*'
+	git fetch origin 'refs/tags/*:refs/tags/*' frotz
++
+The default behavior for a remote may be specified with
+the remote.<name>.tagopt setting. See linkgit:git-config[1].
 
 --recurse-submodules[=yes|on-demand|no]::
 	This option controls if and under what conditions new commits of
-- 
1.7.6.409.ge7a85

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  3:24             ` Michael Witten
  2011-09-22  3:39               ` [PATCH] Docs: Clarify the --tags option of `git fetch' Michael Witten
@ 2011-09-22  4:28               ` Junio C Hamano
  2011-09-22  7:23                 ` [PATCH v3] Docs: Clarify the --tags option of `git fetch' Michael Witten
  1 sibling, 1 reply; 32+ messages in thread
From: Junio C Hamano @ 2011-09-22  4:28 UTC (permalink / raw)
  To: Michael Witten; +Cc: Andrew Ardill, Anatol Pomozov, git, computerdruid

Michael Witten <mfwitten@gmail.com> writes:

> On Thu, Sep 22, 2011 at 03:13, Andrew Ardill <andrew.ardill@gmail.com> wrote:
>>
>> Maybe:
>>
>> Note that if this option is specified, then only tags
>> are fetched. No other refs, such as a remote tracking
>> branch, will be updated, even if it has been updated
>> on the remote end.
>>
>> extra info on how this option is merely a short-hand for writing the
>> refspec `refs/tags/*:refs/tags/* could go here
>
> Junio just explained why your description is inadequate and confusing.
> ...
> If I were a newbie and were to read the text that I just proferred as
> a clarification of --tags, then I would next look up just WTF a
> refspec is, and then a branch, and then...

I do agree with you that it is a futile exercise to sweep fundamental
concepts under the rug, fearing that they are too detailed and too hard
for the casual readers. By understanding how simple the fundamental
concepts and rules are, readers can have a coherent and clear mental model
of the world and synthesize these fundamental rules to understand more
complex operations the Porcelain commands offer to help every day tasks.

I however do not think, and I certainly did not mean, that the description
of "--tags" option is necessarily the place we should bombard a new user
with the term refspec and "refs/tags/*:refs/tags/*" syntax.

I expect the readers to, and I hope the documentation to help them to,
understand the following three basic facts and rules before diving into
descriptions of individual options, such as the paragraph we are
discussing:

 * "git fetch" command serves two purposes:

   (1) It transfers objects the repository the command is invoked in does
   not have from the remote repository. The objects transferred are the
   commits that are necessary to complete the ancestry chain of _some_
   history, and data (i.e. trees and blobs) associated to use these
   commits.

   (2) It optionally can update the local refs (e.g. branches and tags)
   with copies of the refs taken from the remote repository.

 * In the above, the user needs to tell the command two things. One is
   "where the remote repository is". The other is "what refs to fetch and
   (optionally) how to store them". The latter "what to fetch" also
   determines what that "_some_ history" above is (i.e. everything
   reachable from the refs that are fetched).

 * "What to fetch and how to store" have a default, recorded in the
   repository configuration file, that is used when the user does not give
   that information to the command from the command line. If the user does
   give that information from the command line, that default is not used
   at all. IOW, the command line overrides the default.

With that understanding, the _only_ thing that "--tags" description needs
to talk about is that it is an explicit way to give that "what to fetch
and how to store" information from the command line. It instructs the
command to fetch all the tags from the remote repository and store them
locally.

If the logic flow of the document presents the list of options before
helping the readers understand the above basic facts and rules, then I
think _that_ is the problem with the document we need to be addressing,
not the description of an individual option such as "--tags".

^ permalink raw reply	[flat|nested] 32+ messages in thread

* [PATCH v3] Docs: Clarify the --tags option of `git fetch'
  2011-09-22  4:28               ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
@ 2011-09-22  7:23                 ` Michael Witten
  2011-09-22 17:10                   ` Junio C Hamano
  0 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-22  7:23 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

On Wed, 21 Sep 2011 21:28:15 -0700, Junio C Hamano wrote:

> I expect the readers to, and I hope the documentation to help them to,
> understand the following three basic facts and rules before diving into
> descriptions of individual options, such as the paragraph we are
> discussing:
>
>  * "git fetch" command serves two purposes:
>
>    (1) It transfers objects the repository the command is invoked in does
>    not have from the remote repository. The objects transferred are the
>    commits that are necessary to complete the ancestry chain of _some_
>    history, and data (i.e. trees and blobs) associated to use these
>    commits.
>
>    (2) It optionally can update the local refs (e.g. branches and tags)
>    with copies of the refs taken from the remote repository.
>
>  * In the above, the user needs to tell the command two things. One is
>    "where the remote repository is". The other is "what refs to fetch and
>    (optionally) how to store them". The latter "what to fetch" also
>    determines what that "_some_ history" above is (i.e. everything
>    reachable from the refs that are fetched).
>
>  * "What to fetch and how to store" have a default, recorded in the
>    repository configuration file, that is used when the user does not give
>    that information to the command from the command line. If the user does
>    give that information from the command line, that default is not used
>    at all. IOW, the command line overrides the default.
>
> With that understanding, the _only_ thing that "--tags" description needs
> to talk about is that it is an explicit way to give that "what to fetch
> and how to store" information from the command line. It instructs the
> command to fetch all the tags from the remote repository and store them
> locally.

For at least the near term, this patch may do a pretty good job of
achieving those goals without having to change too much; I do some
careful maneuvering to avoid mentioning refspecs until quite late
in the description.

8<-----------8<-----------8<-----------8<-----------8<-----------8<-----------

See the discussion starting here:

  [PATCH] Clarify that '--tags' fetches tags only
  Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
  http://thread.gmane.org/gmane.comp.version-control.git/180636

Suggested-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Michael Witten <mfwitten@gmail.com>
---
 Documentation/fetch-options.txt |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 39d326a..4cc5a80 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -56,14 +56,29 @@ endif::git-pull[]
 ifndef::git-pull[]
 -t::
 --tags::
-	Most of the tags are fetched automatically as branch
-	heads are downloaded, but tags that do not point at
-	objects reachable from the branch heads that are being
-	tracked will not be fetched by this mechanism.  This
-	flag lets all tags and their associated objects be
-	downloaded. The default behavior for a remote may be
-	specified with the remote.<name>.tagopt setting. See
-	linkgit:git-config[1].
+	Most of a remote's tags are fetched automatically as branches are
+	downloaded. However, git does not automatically fetch any tag that,
+	when 'git fetch' completes, would not be reachable from any local
+	branch head.  This option tells git to fetch all tags (and their
+	associated objects).
++
+The 'git fetch' command is often supplied with a default set of branch
+heads to fetch, but using this option tells 'git fetch' to ignore those
+defaults.
++
+This option is merely a shorthand for writing the refspec
+`refs/tags/\*:refs/tags/\*'; that is,
++
+	git fetch origin --tags
+	git fetch origin --tags frotz
++
+are equivalent to:
++
+	git fetch origin 'refs/tags/*:refs/tags/*'
+	git fetch origin frotz 'refs/tags/*:refs/tags/*'
++
+The default behavior for a remote may be specified with
+the remote.<name>.tagopt setting. See linkgit:git-config[1].
 
 --recurse-submodules[=yes|on-demand|no]::
 	This option controls if and under what conditions new commits of
-- 
1.7.6.409.ge7a85

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH v3] Docs: Clarify the --tags option of `git fetch'
  2011-09-22  7:23                 ` [PATCH v3] Docs: Clarify the --tags option of `git fetch' Michael Witten
@ 2011-09-22 17:10                   ` Junio C Hamano
  2011-09-22 17:35                     ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Junio C Hamano @ 2011-09-22 17:10 UTC (permalink / raw)
  To: Michael Witten
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

Michael Witten <mfwitten@gmail.com> writes:

> 8<-----------8<-----------8<-----------8<-----------8<-----------8<-----------
>
> See the discussion starting here:
>
>   [PATCH] Clarify that '--tags' fetches tags only
>   Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
>   http://thread.gmane.org/gmane.comp.version-control.git/180636

It is a good practice to point to earlier discussions while polishing
patch, and it also is good to include pointers in the commit log message
as a supporting material (additional reading), but that is _NOT_ a
substitute for a properly written commit log message. You need to state
what problem you are trying to fix and how the proposed patch fixes it.

>  Documentation/fetch-options.txt |   31 +++++++++++++++++++++++--------
>  1 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
> index 39d326a..4cc5a80 100644
> --- a/Documentation/fetch-options.txt
> +++ b/Documentation/fetch-options.txt
> @@ -56,14 +56,29 @@ endif::git-pull[]
>  ifndef::git-pull[]
>  -t::
>  --tags::
> -	Most of the tags are fetched automatically as branch
> -	heads are downloaded, but tags that do not point at
> -	objects reachable from the branch heads that are being
> -	tracked will not be fetched by this mechanism.  This
> -	flag lets all tags and their associated objects be
> -	downloaded. The default behavior for a remote may be
> -	specified with the remote.<name>.tagopt setting. See
> -	linkgit:git-config[1].
> +	Most of a remote's tags are fetched automatically as branches are
> +	downloaded. However, git does not automatically fetch any tag that,
> +	when 'git fetch' completes, would not be reachable from any local
> +	branch head.  This option tells git to fetch all tags (and their
> +	associated objects).

I would suggest clarifying the beginning of "git fetch --help" like the
attached patch. With that knowledge at hand, the readers do not need the
fuzzy "Most of ... are fetched" (leaving them wondering "what about the
rest, and how that Most is determined?"); we only need to say something
like "fetch all the tags from the remote and store them locally".

 Documentation/git-fetch.txt |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
index 60ac8d2..c6c7236 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.txt
@@ -19,20 +19,19 @@ SYNOPSIS
 
 DESCRIPTION
 -----------
-Fetches named heads or tags from one or more other repositories,
-along with the objects necessary to complete them.
+Fetches branches and tags (collectively known as 'refs') from one or more
+other repositories, along with the objects necessary to complete them.
+Which refs are fetched are determined by the <refspec> arguments, if
+given. Otherwise the default <refspec> configured for the <repository>
+are used (see "REMOTES" section below for how <refspec> works).
 
-The ref names and their object names of fetched refs are stored
-in `.git/FETCH_HEAD`.  This information is left for a later merge
-operation done by 'git merge'.
+The ref names and their object names are also stored in `.git/FETCH_HEAD`.
+This information is used by 'git pull' that invokes this command.
 
 When <refspec> stores the fetched result in remote-tracking branches,
-the tags that point at these branches are automatically
-followed.  This is done by first fetching from the remote using
-the given <refspec>s, and if the repository has objects that are
-pointed by remote tags that it does not yet have, then fetch
-those missing tags.  If the other end has tags that point at
-branches you are not interested in, you will not get them.
+the tags that point at commits on these branches are also fetched. Tags
+at the remote that point at commits that are not on these remote-tracking 
+branches are not fetched by this mechanism (use `--tags` option to fetch them).
 
 'git fetch' can fetch from either a single named repository,
 or from several repositories at once if <group> is given and

^ permalink raw reply related	[flat|nested] 32+ messages in thread

* Re: [PATCH v3] Docs: Clarify the --tags option of `git fetch'
  2011-09-22 17:10                   ` Junio C Hamano
@ 2011-09-22 17:35                     ` Michael Witten
  2011-09-22 17:38                       ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-22 17:35 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

On Thu, Sep 22, 2011 at 17:10, Junio C Hamano <gitster@pobox.com> wrote:
> Michael Witten <mfwitten@gmail.com> writes:
>
>> 8<-----------8<-----------8<-----------8<-----------8<-----------8<-----------
>>
>> See the discussion starting here:
>>
>>   [PATCH] Clarify that '--tags' fetches tags only
>>   Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
>>   http://thread.gmane.org/gmane.comp.version-control.git/180636
>
> It is a good practice to point to earlier discussions while polishing
> patch, and it also is good to include pointers in the commit log message
> as a supporting material (additional reading), but that is _NOT_ a
> substitute for a properly written commit log message. You need to state
> what problem you are trying to fix and how the proposed patch fixes it.
>
>>  Documentation/fetch-options.txt |   31 +++++++++++++++++++++++--------
>>  1 files changed, 23 insertions(+), 8 deletions(-)
>>
>> diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
>> index 39d326a..4cc5a80 100644
>> --- a/Documentation/fetch-options.txt
>> +++ b/Documentation/fetch-options.txt
>> @@ -56,14 +56,29 @@ endif::git-pull[]
>>  ifndef::git-pull[]
>>  -t::
>>  --tags::
>> -     Most of the tags are fetched automatically as branch
>> -     heads are downloaded, but tags that do not point at
>> -     objects reachable from the branch heads that are being
>> -     tracked will not be fetched by this mechanism.  This
>> -     flag lets all tags and their associated objects be
>> -     downloaded. The default behavior for a remote may be
>> -     specified with the remote.<name>.tagopt setting. See
>> -     linkgit:git-config[1].
>> +     Most of a remote's tags are fetched automatically as branches are
>> +     downloaded. However, git does not automatically fetch any tag that,
>> +     when 'git fetch' completes, would not be reachable from any local
>> +     branch head.  This option tells git to fetch all tags (and their
>> +     associated objects).
>
> I would suggest clarifying the beginning of "git fetch --help" like the
> attached patch. With that knowledge at hand, the readers do not need the
> fuzzy "Most of ... are fetched" (leaving them wondering "what about the
> rest, and how that Most is determined?"); we only need to say something
> like "fetch all the tags from the remote and store them locally".
>
>  Documentation/git-fetch.txt |   21 ++++++++++-----------
>  1 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
> index 60ac8d2..c6c7236 100644
> --- a/Documentation/git-fetch.txt
> +++ b/Documentation/git-fetch.txt
> @@ -19,20 +19,19 @@ SYNOPSIS
>
>  DESCRIPTION
>  -----------
> -Fetches named heads or tags from one or more other repositories,
> -along with the objects necessary to complete them.
> +Fetches branches and tags (collectively known as 'refs') from one or more
> +other repositories, along with the objects necessary to complete them.
> +Which refs are fetched are determined by the <refspec> arguments, if
> +given. Otherwise the default <refspec> configured for the <repository>
> +are used (see "REMOTES" section below for how <refspec> works).
>
> -The ref names and their object names of fetched refs are stored
> -in `.git/FETCH_HEAD`.  This information is left for a later merge
> -operation done by 'git merge'.
> +The ref names and their object names are also stored in `.git/FETCH_HEAD`.
> +This information is used by 'git pull' that invokes this command.
>
>  When <refspec> stores the fetched result in remote-tracking branches,
> -the tags that point at these branches are automatically
> -followed.  This is done by first fetching from the remote using
> -the given <refspec>s, and if the repository has objects that are
> -pointed by remote tags that it does not yet have, then fetch
> -those missing tags.  If the other end has tags that point at
> -branches you are not interested in, you will not get them.
> +the tags that point at commits on these branches are also fetched. Tags
> +at the remote that point at commits that are not on these remote-tracking
> +branches are not fetched by this mechanism (use `--tags` option to fetch them).
>
>  'git fetch' can fetch from either a single named repository,
>  or from several repositories at once if <group> is given and
>

The only problem is that none of what you say seems to be true.

  * The glossary very distinctly differentiates the
    term `branch' from `branch head'.

  * From skimming the code, it would seem that remote-tracking
    branch [*heads*] are not at all the determining factor for
    whether tags are automatically fetched. Rather, the
    determining factor is much more relaxed: Tags are fetched
    when a refspec's <dst> field is non-empty; it just so
    happens that a <dst> is usually non-empty because at least
    one remote-tracking branch [*head*] is being updated, but
    keep in mind that the branch being updated need not be
    considered a remote-tracking branch.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH v3] Docs: Clarify the --tags option of `git fetch'
  2011-09-22 17:35                     ` Michael Witten
@ 2011-09-22 17:38                       ` Michael Witten
  0 siblings, 0 replies; 32+ messages in thread
From: Michael Witten @ 2011-09-22 17:38 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: Anatol Pomozov, Drew Northup, Andrew Ardill, Daniel Johnson, git

On Thu, Sep 22, 2011 at 17:35, Michael Witten <mfwitten@gmail.com> wrote:
> On Thu, Sep 22, 2011 at 17:10, Junio C Hamano <gitster@pobox.com> wrote:
>> Michael Witten <mfwitten@gmail.com> writes:
>>
>>> 8<-----------8<-----------8<-----------8<-----------8<-----------8<-----------
>>>
>>> See the discussion starting here:
>>>
>>>   [PATCH] Clarify that '--tags' fetches tags only
>>>   Message-ID: <1314997486-29996-1-git-send-email-anatol.pomozov@gmail.com>
>>>   http://thread.gmane.org/gmane.comp.version-control.git/180636
>>
>> It is a good practice to point to earlier discussions while polishing
>> patch, and it also is good to include pointers in the commit log message
>> as a supporting material (additional reading), but that is _NOT_ a
>> substitute for a properly written commit log message. You need to state
>> what problem you are trying to fix and how the proposed patch fixes it.
>>
>>>  Documentation/fetch-options.txt |   31 +++++++++++++++++++++++--------
>>>  1 files changed, 23 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
>>> index 39d326a..4cc5a80 100644
>>> --- a/Documentation/fetch-options.txt
>>> +++ b/Documentation/fetch-options.txt
>>> @@ -56,14 +56,29 @@ endif::git-pull[]
>>>  ifndef::git-pull[]
>>>  -t::
>>>  --tags::
>>> -     Most of the tags are fetched automatically as branch
>>> -     heads are downloaded, but tags that do not point at
>>> -     objects reachable from the branch heads that are being
>>> -     tracked will not be fetched by this mechanism.  This
>>> -     flag lets all tags and their associated objects be
>>> -     downloaded. The default behavior for a remote may be
>>> -     specified with the remote.<name>.tagopt setting. See
>>> -     linkgit:git-config[1].
>>> +     Most of a remote's tags are fetched automatically as branches are
>>> +     downloaded. However, git does not automatically fetch any tag that,
>>> +     when 'git fetch' completes, would not be reachable from any local
>>> +     branch head.  This option tells git to fetch all tags (and their
>>> +     associated objects).
>>
>> I would suggest clarifying the beginning of "git fetch --help" like the
>> attached patch. With that knowledge at hand, the readers do not need the
>> fuzzy "Most of ... are fetched" (leaving them wondering "what about the
>> rest, and how that Most is determined?"); we only need to say something
>> like "fetch all the tags from the remote and store them locally".
>>
>>  Documentation/git-fetch.txt |   21 ++++++++++-----------
>>  1 files changed, 10 insertions(+), 11 deletions(-)
>>
>> diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
>> index 60ac8d2..c6c7236 100644
>> --- a/Documentation/git-fetch.txt
>> +++ b/Documentation/git-fetch.txt
>> @@ -19,20 +19,19 @@ SYNOPSIS
>>
>>  DESCRIPTION
>>  -----------
>> -Fetches named heads or tags from one or more other repositories,
>> -along with the objects necessary to complete them.
>> +Fetches branches and tags (collectively known as 'refs') from one or more
>> +other repositories, along with the objects necessary to complete them.
>> +Which refs are fetched are determined by the <refspec> arguments, if
>> +given. Otherwise the default <refspec> configured for the <repository>
>> +are used (see "REMOTES" section below for how <refspec> works).
>>
>> -The ref names and their object names of fetched refs are stored
>> -in `.git/FETCH_HEAD`.  This information is left for a later merge
>> -operation done by 'git merge'.
>> +The ref names and their object names are also stored in `.git/FETCH_HEAD`.
>> +This information is used by 'git pull' that invokes this command.
>>
>>  When <refspec> stores the fetched result in remote-tracking branches,
>> -the tags that point at these branches are automatically
>> -followed.  This is done by first fetching from the remote using
>> -the given <refspec>s, and if the repository has objects that are
>> -pointed by remote tags that it does not yet have, then fetch
>> -those missing tags.  If the other end has tags that point at
>> -branches you are not interested in, you will not get them.
>> +the tags that point at commits on these branches are also fetched. Tags
>> +at the remote that point at commits that are not on these remote-tracking
>> +branches are not fetched by this mechanism (use `--tags` option to fetch them).
>>
>>  'git fetch' can fetch from either a single named repository,
>>  or from several repositories at once if <group> is given and
>>
>
> The only problem is that none of what you say seems to be true.
>
>  * The glossary very distinctly differentiates the
>    term `branch' from `branch head'.
>
>  * From skimming the code, it would seem that remote-tracking
>    branch [*heads*] are not at all the determining factor for
>    whether tags are automatically fetched. Rather, the
>    determining factor is much more relaxed: Tags are fetched
>    when a refspec's <dst> field is non-empty; it just so
>    happens that a <dst> is usually non-empty because at least
>    one remote-tracking branch [*head*] is being updated, but
>    keep in mind that the branch being updated need not be
>    considered a remote-tracking branch.

DAMNIT

That last bit should use the world `head':

  but keep in mind that the branch *head* being updated
  need not be considered a remote-tracking branch [*head*].

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-22  1:14   ` [PATCH] Clarify that '--tags' fetches tags only Daniel Johnson
@ 2011-09-30  2:51     ` Peter Shenkin
  2011-09-30  8:44       ` Jakub Narebski
                         ` (2 more replies)
  0 siblings, 3 replies; 32+ messages in thread
From: Peter Shenkin @ 2011-09-30  2:51 UTC (permalink / raw)
  To: git

Hi,

I just searched the List to see if there were any postings on
"fetch --tags", because I was recently  thrown for a loop by
the fact the this command retrieves only tags (and commits
needed to fulfill them). So I was very happy to find this
discussion. I was actually trying to figure out whether the
observed behavior is a bug, given that there is no mention of
it in the documentation.

Perhaps it will be useful to say what would have been most
helpful for me. In the current documentation for "fetch
--tags", one sentence reads, "This flag lets all tags and
their associated  objects be downloaded." The following small
modification would, IMO, be sufficient: "This flag causes all
tags and their associated objects (only) to be downloaded."

Now I have a related question. I always want to retrieve all
tags from tracking branches when I do a "git pull". Right now,
if I want to do this, it seem (unless I am missing something)
that I have to do "git fetch --tags; git fetch;  git merge". Is
there a way I can put something into my .git/config file so
that I get this effect simply by doing a "git pull"? That's
what I was trying to do when I added "tagopt = --tags".

Thanks,
-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-30  2:51     ` Peter Shenkin
@ 2011-09-30  8:44       ` Jakub Narebski
  2011-09-30 13:23       ` Michael Witten
  2011-09-30 18:37       ` Junio C Hamano
  2 siblings, 0 replies; 32+ messages in thread
From: Jakub Narebski @ 2011-09-30  8:44 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

Peter Shenkin <shenkin@gmail.com> writes:

[...]
> Now I have a related question. I always want to retrieve all
> tags from tracking branches when I do a "git pull". Right now,
> if I want to do this, it seem (unless I am missing something)
> that I have to do "git fetch --tags; git fetch;  git merge". Is
> there a way I can put something into my .git/config file so
> that I get this effect simply by doing a "git pull"? That's
> what I was trying to do when I added "tagopt = --tags".

Actually fetching of branches on remote into remote-tracking branches
would also fetch all tags that point to commits on fetched branches
(so called "autofollow" feature).

If you want to fetch _all_ tags, you need to configure fetched
branches (e.g. via glob refspec). I think that then "tagopt = --tags"
works as expected then, as it is in addition to refspec not as the
only refspec; "fetch = +refs/tags/*:refs/tags/*" should work as well.

HTH
-- 
Jakub Narębski

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-30  2:51     ` Peter Shenkin
  2011-09-30  8:44       ` Jakub Narebski
@ 2011-09-30 13:23       ` Michael Witten
  2011-10-01  5:40         ` Peter Shenkin
  2011-09-30 18:37       ` Junio C Hamano
  2 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-09-30 13:23 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

On Fri, Sep 30, 2011 at 02:51, Peter Shenkin <shenkin@gmail.com> wrote:
> Perhaps it will be useful to say what would have been most
> helpful for me. In the current documentation for "fetch
> --tags", one sentence reads, "This flag lets all tags and
> their associated  objects be downloaded." The following small
> modification would, IMO, be sufficient: "This flag causes all
> tags and their associated objects (only) to be downloaded."

Well, you're missing the fact that it not only causes those to
be downloaded, but it also causes the defaults to be ignored,
which is why you don't get the other stuff. You can still tell
git to fetch anything else you want in addition.

See here:

  [PATCH v3] Docs: Clarify the --tags option of `git fetch'
  Message-ID: <686c38876d5a4ad6bfac67ca77fe9bb3-mfwitten@gmail.com>
  http://article.gmane.org/gmane.comp.version-control.git/181887

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-30  2:51     ` Peter Shenkin
  2011-09-30  8:44       ` Jakub Narebski
  2011-09-30 13:23       ` Michael Witten
@ 2011-09-30 18:37       ` Junio C Hamano
  2011-10-01  5:51         ` Peter Shenkin
  2 siblings, 1 reply; 32+ messages in thread
From: Junio C Hamano @ 2011-09-30 18:37 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

Peter Shenkin <shenkin@gmail.com> writes:

> Perhaps it will be useful to say what would have been most
> helpful for me. In the current documentation for "fetch
> --tags", one sentence reads, "This flag lets all tags and
> their associated  objects be downloaded." The following small
> modification would, IMO, be sufficient: "This flag causes all
> tags and their associated objects (only) to be downloaded."

Hmm, from time to time we seem to see this kind of documentation
suggestion where:

 - We (try to) describe what xyzzy does by saying "This is what xyzzy
   does". We specifically do not say "In addition to what normally
   happens, xyzzy causes these additional things to happen."

 - The reader (somehow) assumes xyzzy does more than what we described in
   the documentation, even we did not say "In addition to..."; and then

 - A patch is proposed to add "these other things are _not_ done", after
   existing "This is what xyzzy does".

And it is not limited to the description of this particular option.

I think in general our documentation aims to spell out _all_ that happens,
and explicitly say "In addition to what normally happens", "This page
lists only the most common ways", etc., when such a clatification is
needed.

I am wondering if there is a systemic failure that gives an impression
that by default the documentation is incomplete and all other unspecified
thing also happens to the readers? If so are there things that we could
do better without going through individual description?

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-30 13:23       ` Michael Witten
@ 2011-10-01  5:40         ` Peter Shenkin
  2011-10-01 14:11           ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01  5:40 UTC (permalink / raw)
  To: git

Michael Witten <mfwitten <at> gmail.com> writes:
> Well, you're missing the fact that it not only causes those to
> be downloaded, but it also causes the defaults to be ignored,
> which is why you don't get the other stuff. You can still tell
> git to fetch anything else you want in addition.

I was no longer missing it at the time I posted. 

But that is indeed what I was missing when I first encountered 
the behavior. The purpose of posting was to point out that 
with  a very small change in the documentation,  I would not
have missed it. 

-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-09-30 18:37       ` Junio C Hamano
@ 2011-10-01  5:51         ` Peter Shenkin
  0 siblings, 0 replies; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01  5:51 UTC (permalink / raw)
  To: git

Junio C Hamano <gitster <at> pobox.com> writes:
> I think in general our documentation aims to spell out _all_ that happens,
...
 
> I am wondering if there is a systemic failure...
> ,,,If so are there things that we could
> do better without going through individual description?


Yes, I would say that there is one obvious 
systemic failure. 

Nowhere is it documented (as far as I am aware) that
this is the  way the git documentation should be read.

Since, in this regard, it differs from most software
documentation, it ought itself to be documented,
perhaps on the top-level git man page.

-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01  5:40         ` Peter Shenkin
@ 2011-10-01 14:11           ` Michael Witten
  2011-10-01 17:16             ` Peter Shenkin
  0 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-10-01 14:11 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

On Sat, Oct 1, 2011 at 05:40, Peter Shenkin <shenkin@gmail.com> wrote:
> Michael Witten <mfwitten <at> gmail.com> writes:
>> Well, you're missing the fact that it not only causes those to
>> be downloaded, but it also causes the defaults to be ignored,
>> which is why you don't get the other stuff. You can still tell
>> git to fetch anything else you want in addition.
>
> I was no longer missing it at the time I posted.
>
> But that is indeed what I was missing when I first encountered
> the behavior. The purpose of posting was to point out that
> with  a very small change in the documentation,  I would not
> have missed it.

However, my point was this:

  You can still tell git to fetch anything else you want in addition.

That point doesn't seem clear with your proposed alteration.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 14:11           ` Michael Witten
@ 2011-10-01 17:16             ` Peter Shenkin
  2011-10-01 18:45               ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01 17:16 UTC (permalink / raw)
  To: git

Michael Witten <mfwitten <at> gmail.com> writes:
> However, my point was this:
> 
>   You can still tell git to fetch anything else you want in addition.

Michael,

Yes, you are right. I am still missing how to do that.

Can you show me a sample fetch invocation that would
have the effect of downloading all tags and also branch heads?

Thanks,
-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 17:16             ` Peter Shenkin
@ 2011-10-01 18:45               ` Michael Witten
  2011-10-01 20:22                 ` Peter Shenkin
  0 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-10-01 18:45 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

On Sat, Oct 1, 2011 at 17:16, Peter Shenkin <shenkin@gmail.com> wrote:
> Michael Witten <mfwitten <at> gmail.com> writes:
>> However, my point was this:
>>
>>   You can still tell git to fetch anything else you want in addition.
>
> Michael,
>
> Yes, you are right. I am still missing how to do that.
>
> Can you show me a sample fetch invocation that would
> have the effect of downloading all tags and also branch heads?

Unfortunately, there's currently no way to tell "git fetch" to
download whatever your configuration files specify as default, but you
can at least be explicit by using what's called a "refspec" (which is
documented in "git help fetch"):

  git fetch --tags origin '+refs/heads/*:refs/remotes/origin/*'

You could probably get your hands on the default refspec by rigging
something up with "git symbolic-ref" and "git config", but that's so
much hassle; currently, it is probably best just to run "git fetch"
twice.

Sincerely,
Michael Witten

You might also find this email insightful:

  http://article.gmane.org/gmane.comp.version-control.git/181911
  Message-ID: <7142366f54c44cea82542adf8aea5bb9-mfwitten@gmail.com>
  Subject: Re: any way to "re-sync" a bare repository against
               another bare repository?

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 18:45               ` Michael Witten
@ 2011-10-01 20:22                 ` Peter Shenkin
  2011-10-01 20:56                   ` Michael Witten
  0 siblings, 1 reply; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01 20:22 UTC (permalink / raw)
  To: git

Michael Witten <mfwitten <at> gmail.com> writes:
>   git fetch --tags origin '+refs/heads/*:refs/remotes/origin/*'

Well, Junio had just about convinced me that there was
nothing wrong with the documentation -- just with the
way I was reading it -- until I read the above.

I tried it and yes, it does do what I want. Which was not
at all my expectation, having read Junio's comment about
how the documentation is to be read.

Junio argued that the man-page mod I suggested -- 
namely, "This flag causes all tags and their associated
objects (only) to be downloaded." -- was unneeded 
because the meaning, though correct, is clear already and
therefore redundant.

But the real problem is that the reading he gives is just
wrong.

I have the following in my .git/config file:

[remote "origin"]
	fetch = +refs/heads/*:refs/remotes/origin/*
	tagopt = --tags
	url = <whatever>

Given this, I do not see how anyone could infer from 
anything in the documentation that

git fetch

would do anything different from:

git fetch --tags origin +refs/heads/*:refs/remotes/origin/*

If I am wrong about this, please cite chapter and verse.

The question is not how the --tags option should be
documented, but rather why "--tags" should behave
differently when the refspec is given on the commandline
than when the refspec is given in the .git/config file.

In fact, I no longer think it is a documentation error. It
is a just a really terrible implementation decision. If it
was desired to allow "git fetch --tags" to work without
using the user's specified refspec, then a "--no-heads"
option should have been provided to override the user's
refspec -- no matter where it was given.

Though a retrofit would likely break too many workflows,
the best one might hope for now would likely be the
addition of a "--heads" option, which would have the
effect of  bringing down the branch heads even though
this would not normally be done." 

But then it would still be necessary to say that "--tags"
does not normally obey the user's refspec if given in the
config file, but does if given on the command line. 

I might still be missing something. If anyone thinks the
current behavior is clear from a careful reading of the
documentation, I would like to hear how that inference
could be drawn. For no matter how one reads the --tags
description, it seems it is wrong in one of the two cases.

It is either wrong for a refspec on the command-line (if
you think it says it downloads tags only) or else it is wrong
for refspec in the config file (if you think it says it downloads
tags and heads).

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 20:22                 ` Peter Shenkin
@ 2011-10-01 20:56                   ` Michael Witten
  2011-10-01 21:41                     ` Peter Shenkin
  0 siblings, 1 reply; 32+ messages in thread
From: Michael Witten @ 2011-10-01 20:56 UTC (permalink / raw)
  To: Peter Shenkin; +Cc: git

On Sat, Oct 1, 2011 at 20:22, Peter Shenkin <shenkin@gmail.com> wrote:
>
> The question is not how the --tags option should be
> documented, but rather why "--tags" should behave
> differently when the refspec is given on the commandline
> than when the refspec is given in the .git/config file.

Again, see here:

 [PATCH v3] Docs: Clarify the --tags option of `git fetch'
 Message-ID: <686c38876d5a4ad6bfac67ca77fe9bb3-mfwitten@gmail.com>
 http://article.gmane.org/gmane.comp.version-control.git/181887

namely:

    This option is merely a shorthand for writing the refspec
    `refs/tags/\*:refs/tags/\*'; that is,

            git fetch origin --tags
            git fetch origin --tags frotz

    are equivalent to:

            git fetch origin 'refs/tags/*:refs/tags/*'
            git fetch origin frotz 'refs/tags/*:refs/tags/*'

In other words, by writing "--tags", you are actually writing
"refs/tags/\*:refs/tags/\*"; because you are stating an *explicit*
refspec, "git fetch" doesn't bother with any *implicit* default
in your config, which is consistent with how "git fetch" works.

It would probably be a good idea if there were a "--defaults", too.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 20:56                   ` Michael Witten
@ 2011-10-01 21:41                     ` Peter Shenkin
  2011-10-01 22:06                       ` Peter Shenkin
  0 siblings, 1 reply; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01 21:41 UTC (permalink / raw)
  To: git

Michael Witten <mfwitten <at> gmail.com> writes:
 
> On Sat, Oct 1, 2011 at 20:22, Peter Shenkin <shenkin <at> gmail.com> wrote:
>     [--tags] is merely a shorthand for writing the refspec
>     `refs/tags/\*:refs/tags/\*'; that is,

Yes, I understand that fully and it makes perfect sense.

But it leaves unexplained and undocumented the fact
that the user's specification of an *additional* refspec is
observed if the additional refspec is given on the
command line but ignored if the additional refspec is
given in the config file.

-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

* Re: [PATCH] Clarify that '--tags' fetches tags only
  2011-10-01 21:41                     ` Peter Shenkin
@ 2011-10-01 22:06                       ` Peter Shenkin
  0 siblings, 0 replies; 32+ messages in thread
From: Peter Shenkin @ 2011-10-01 22:06 UTC (permalink / raw)
  To: git

Peter Shenkin <shenkin <at> gmail.com> writes:
> But it leaves unexplained and undocumented the fact
> that the user's specification of an *additional* refspec is
> observed if the additional refspec is given on the
> command line but ignored if the additional refspec is
> given in the config file.

I have to take this back. It makes sense that a refspec on
the cmdline overrides one in the config file.

I understand the behavior now, and Michael's  suggestion of a
--default to add the refspec in the config file to the cmdline
is IMO a good one.

'Nuff said. (By me, anyway....)

Thanks for your help and patience, everyone.

-P.

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2011-10-01 22:07 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-02 21:04 [PATCH] Clarify that '--tags' fetches tags only Anatol Pomozov
2011-09-02 21:18 ` Drew Northup
2011-09-21 23:52 ` Anatol Pomozov
2011-09-22  0:13   ` Michael Witten
2011-09-22  0:49     ` Junio C Hamano
2011-09-22  2:01       ` Michael Witten
2011-09-22  2:07         ` Michael Witten
2011-09-22  3:13           ` Andrew Ardill
2011-09-22  3:24             ` Michael Witten
2011-09-22  3:39               ` [PATCH] Docs: Clarify the --tags option of `git fetch' Michael Witten
2011-09-22  3:48                 ` Michael Witten
2011-09-22  4:28               ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
2011-09-22  7:23                 ` [PATCH v3] Docs: Clarify the --tags option of `git fetch' Michael Witten
2011-09-22 17:10                   ` Junio C Hamano
2011-09-22 17:35                     ` Michael Witten
2011-09-22 17:38                       ` Michael Witten
2011-09-22  4:00         ` [PATCH] Clarify that '--tags' fetches tags only Junio C Hamano
2011-09-22  4:17           ` [PATCH v2] Docs: Clarify the --tags option of `git fetch' Michael Witten
2011-09-22  1:14   ` [PATCH] Clarify that '--tags' fetches tags only Daniel Johnson
2011-09-30  2:51     ` Peter Shenkin
2011-09-30  8:44       ` Jakub Narebski
2011-09-30 13:23       ` Michael Witten
2011-10-01  5:40         ` Peter Shenkin
2011-10-01 14:11           ` Michael Witten
2011-10-01 17:16             ` Peter Shenkin
2011-10-01 18:45               ` Michael Witten
2011-10-01 20:22                 ` Peter Shenkin
2011-10-01 20:56                   ` Michael Witten
2011-10-01 21:41                     ` Peter Shenkin
2011-10-01 22:06                       ` Peter Shenkin
2011-09-30 18:37       ` Junio C Hamano
2011-10-01  5:51         ` Peter Shenkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.