git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Teemu Likonen <tlikonen@iki.fi>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Add examples section to 'git fetch' manual
Date: Sun, 13 Apr 2008 11:56:21 -0700	[thread overview]
Message-ID: <7v63uld1nu.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <20080413093424.GA12861@mithlond.arda.local> (Teemu Likonen's message of "Sun, 13 Apr 2008 12:34:24 +0300")

Teemu Likonen <tlikonen@iki.fi> writes:

> +EXAMPLES
> +--------
> +
> +git fetch git://host.xz/repo.git/ master:pu::
> +	Fetch branch `master` from given repository URL and store it locally
> +	as `pu`.

While this may technically be correct (and I'll say upfront that all of
your "examples" may technically be correct), I would suggest strongly
against putting this into EXAMPLES section.  People look at examples
section to look up something they need to do often; the section should
describe the best practices we can suggest them in real life.

The above command line is a _great_ way to explain what happens under the
hood when you have the matching configuration in .git/config for the
remote, so that people would know how to update .git/config entries from
what git-clone and "git-remote add" give them by default to suit their
needs (e.g. instead of storing all branches in remotes/origin/*, you can
configure to only fetch and store a few selected branches).  But, fetching
from somewhere and storing it explicitly _from the command line_ like your
example command line is something you would _never_ do in real life if you
know git.

> +git fetch git://host.xz/repo.git/ master:remotes/pu::
> +	Fetch branch `master` from given repository URL and store it locally as
> +	remote tracking branch `pu`.

And this example is even worse, as the common example is to have remote
name between "remotes" and "pu".

> +git fetch git://host.xz/repo.git/ master::
> +	Fetch branch `master` from given repository URL but do not create the
> +	branch locally. Only the temporary pointer FETCH_HEAD is set to refer
> +	to the fetched branch.

This one is a fine example of a one-shot command to look at what they
have without actually affecting your own history.  Use of this form in
real life is very sane.

> +git fetch alice master:remotes/alice/pu::
> +	Fetch branch `master` from remote named `alice` and store it locally as
> +	remote tracking branch `alice/pu`. See linkgit:git-remote[1] for more
> +	information on configuring remotes.

This is a wrong example on multiple counts (this is one of the worst one
in your change, so I'll explain in more detail than for others).

First of all, think about the reason _why_ the convention is to use a
separate namespace under remotes/ per remote.  It is to allow us to use
the names that correspond to what the remote repository uses without
having to worry about name collisions, and the reason we took pains to
implement the mechanism to allow you to use such corresponding names is to
avoid having to remember "what she calls master is what I call pu".

"I want to make sure I can tell my master and her master apart without
confusing myself, so I'd call mine master and call hers alice/master" is
the recommended use pattern which "git clone" and "git remote add" give
the user.  An EXAMPLE that deviates from it without explaining why/when it
is a good thing to do is BAD.  Remember, many people blindly copy and
paste the examples section without thinking, assuming that they suggest
the best practice.

If you have nickname "alice" defined, you are by definition interacting
with her regularly.  If you are doing a one-off with such a repository,
running "git fetch alice master" and operating on the resulting FETCH_HEAD
(and you typically use tag or local branch if you want to mark that
commit, with "git tag" or "git branch"), would be much less error prone,
less confusing, and more straightforward recommended approach.  Typically,
you would have the usual refs/heads/*:refs/remotes/alice/* fetch refspec,
so you would not even say "master" and instead run "git fetch alice" and
look at "remotes/alice/master".

Your above command line again may be a great way to explain what you could
do and what the mechanism is equipped to allow you to, but I do not think
there is any reason to use it in the real life.  It should not be in the
EXAMPLE section.

> +git fetch origin::
> +	From the remote named `origin` fetch and store all branches as
> +	configured in `remote.origin.fetch`. Usually this means fetching all
> +	branches and storing them locally as remote tracking branches
> +	`origin/*`. See linkgit:git-remote[1] for more information.

This is a valid thing to add to the examples section, although I suspect
people would already know it when they encouter this page.

  reply	other threads:[~2008-04-13 18:57 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-09 10:14 git annoyances Ingo Molnar
2008-04-09 10:41 ` Björn Steinbrink
2008-04-09 14:57 ` Jeff King
2008-04-09 15:15   ` [PATCH] git-remote: show all remotes with "git remote show" Jeff King
2008-04-09 16:54     ` Johannes Schindelin
2008-04-10 10:56       ` Junio C Hamano
2008-04-09 20:07     ` Ingo Molnar
2008-04-10 19:59     ` Ingo Molnar
2008-04-09 17:08   ` git annoyances Avery Pennarun
2008-04-10  8:41     ` Karl Hasselström
2008-04-10 15:05       ` Avery Pennarun
2008-04-11  7:00         ` Karl Hasselström
2008-04-09 20:08   ` Friendly refspecs (Was: Re: git annoyances) Teemu Likonen
2008-04-09 20:32     ` Avery Pennarun
2008-04-09 20:34     ` Jeff King
2008-04-09 22:25       ` Teemu Likonen
2008-04-09 22:51         ` Jeff King
2008-04-10  0:03           ` Jeff King
2008-04-10  0:11             ` Jeff King
2008-04-10  7:51               ` Friendly refspecs Junio C Hamano
2008-04-10  8:03                 ` Jeff King
     [not found]           ` <bd6139dc0804091616k53f4e0c1sf75aa9585c5a54c5@mail.gmail.com>
2008-04-10  0:33             ` Friendly refspecs (Was: Re: git annoyances) Jeff King
2008-04-10  7:58               ` Sverre Rabbelier
2008-04-13  9:31           ` Friendly refspecs Teemu Likonen
2008-04-13  9:34             ` [PATCH] Add examples section to 'git fetch' manual Teemu Likonen
2008-04-13 18:56               ` Junio C Hamano [this message]
2008-04-13 19:48                 ` Matt Graham
2008-04-13 20:05                 ` Teemu Likonen
2008-04-14  1:02                   ` Junio C Hamano
2008-04-16  3:48             ` Friendly refspecs Jeff King
2008-04-16  4:25               ` Jeff King
2008-04-16  4:41               ` Junio C Hamano
2008-04-16  4:47                 ` Jeff King
2008-04-16 15:42               ` Daniel Barkalow
2008-04-16 20:03                 ` Junio C Hamano
2008-04-22 10:56                   ` Jeff King
2008-04-22 16:52                     ` Junio C Hamano
2008-04-22 17:19                       ` Daniel Barkalow
2008-04-22 20:12                         ` Jeff King
2008-04-22 20:05                       ` Jeff King
2008-04-22 20:45                         ` Junio C Hamano
2008-04-22 21:52                           ` Jeff King
2008-04-23  4:24                           ` Teemu Likonen
2008-04-23  5:52                             ` Junio C Hamano
2008-04-23  6:24                               ` Andreas Ericsson
2008-04-23  9:16                               ` Jeff King
2008-04-23  9:21                                 ` Jeff King
2008-04-23 11:15                                   ` Teemu Likonen
2008-04-09 21:21     ` Junio C Hamano
2008-04-10  7:38       ` Teemu Likonen
2008-04-12 18:59   ` git annoyances Santiago Gala
2008-04-09 19:21 ` Daniel Barkalow
2008-04-09 20:41   ` Ingo Molnar
2008-04-10 14:08     ` Daniel Barkalow
2008-04-09 21:04 ` Junio C Hamano
2008-04-09 21:39   ` Jon Loeliger
2008-04-09 23:45     ` Nicolas Pitre
2008-04-09 21:45   ` Jeff King
2008-04-09 23:56   ` André Goddard Rosa
2008-04-10 19:45     ` Govind Salinas
2008-04-10  6:08   ` Jean-Christian de Rivaz
2008-04-10  8:19     ` Sverre Rabbelier
2008-04-10 11:47 ` git-bisect annoyances Ingo Molnar
2008-04-11  5:41   ` Christian Couder
2008-04-11 11:41     ` Ingo Molnar
2008-04-12  6:56       ` Christian Couder
2008-04-11  5:56   ` Junio C Hamano
2008-04-10 23:25 ` [PATCH] When a remote is added but not fetched, tell the user Gabriel
2008-04-11 15:21   ` Johannes Schindelin
2008-04-11 18:35     ` Gabriel
2008-04-11 18:39       ` [PATCH] Default to fetching a remote after adding it Gabriel
2008-04-11 19:17         ` Stephen Sinclair
2008-04-12 14:33         ` Johannes Schindelin
2008-04-12 15:13           ` Gabriel
2008-04-12 15:24             ` Johannes Schindelin
2008-04-11 19:08       ` [PATCH] When a remote is added but not fetched, tell the user Teemu Likonen
2008-04-11 21:39         ` Junio C Hamano
2008-04-11 22:35           ` Sverre Rabbelier
2008-04-11 23:15             ` Junio C Hamano
2008-04-11 23:20               ` Sverre Rabbelier
2008-04-15  3:15         ` Miles Bader
2008-04-11 19:29       ` [PATCH] Default to fetching a remote after adding it Gabriel
2008-04-11 19:36         ` Wincent Colaiuta
2008-04-11 19:46           ` Gabriel
2008-04-11 10:15 ` git annoyances Luciano Rocha
2008-04-11 10:27   ` Wincent Colaiuta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7v63uld1nu.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=tlikonen@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).