git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: git@vger.kernel.org
Subject: Re: Friendly refspecs (Was: Re: git annoyances)
Date: Wed, 9 Apr 2008 16:34:54 -0400	[thread overview]
Message-ID: <20080409203453.GA10370@sigill.intra.peff.net> (raw)
In-Reply-To: <20080409200836.GA19248@mithlond>

On Wed, Apr 09, 2008 at 11:08:36PM +0300, Teemu Likonen wrote:

> seem quite unnecessary hackerish. Pull and push work pretty nicely
> without knowing about any refs/* stuff; they can be operated with simple
> branch names. Fetch is another story. Some ideas:
> 
>   $ git fetch <URL>
> 
> would be equivalent to
> 
>   $ git fetch <URL> +refs/heads/*:refs/remotes/<name>/*
> 
> In other words, fetch all the branches from remote repo and store them
> locally as remote tracking branches to <name>/ hieararchy. The <name> is
> the last component taken from the <URL> (maybe "origin" if it can't be
> detected).

This has been discussed before and rejected, because the point of doing
a fetch of a URL (rather than a remote name) is to do a "one-off" thing.
IOW, you don't _want_ the tracking branches, as they will just clutter
your branch space (plus choosing the last component is a bad heuristic;
lots of people must ask Linus to pull from their .../linux-2.6
repository).

Almost nobody says "git fetch <URL>"; it is just a subpart of "git
pull <URL>" which is intended for one-off merges (i.e., you are not
tracking somebody over the long term, you just want to grab their work
and merge it).

> Currently "git fetch <URL>" does not seem to do anything useful for
> non-git-hackers. It seems to fetch objects but not create any branches
> referring to them. As a comparison, let's configure a remote and run

It does; it puts the refs into FETCH_HEAD. Maybe a status table like the
usual one would be more informative, like:

  From git://host/path/to/repo
   * [new branch]      foo -> FETCH_HEAD

though again, it would help if we could see a workflow that uses "git
fetch <URL>" for something. I think the simplest answer in your case is
"don't use git fetch <URL>".

> similar fetch command without any refspecs explicitly named:
> 
>   $ git remote add <name> <URL>
>   $ git fetch <name>
> 
> Now this fetch really creates all the branches (as defined in
> remote.<name>.fetch) which is nice and the way Git currently works.

Sure. There is an explicit design decision that "because you gave this
thing a nickname, you are probably interested in keeping its tracking
branches around."

> Some more ideas for simple refspecs:
> 
>   $ git fetch <URL|name> <branch>
> 
> would be equivalent to
> 
>   $ git fetch <URL|name> +refs/heads/<branch>:refs/remotes/<name>/<branch>

It would probably be nice if "git fetch name foo" saved the remote
tracking branch remotes/name/foo, which it doesn't currently. But
whether to do it with a URL is orthogonal; it depends on whether we use
tracking branches for URLs in general, as you suggested above.

>   $ git fetch <URL|name> <Rbranch>:<Lbranch>
> 
> would be equivalent to
> 
>   $ git fetch <URL|name> +refs/heads/<Rbranch>:refs/remotes/<Lbranch>

We almost have that. It's actually spelled:

  git fetch <URL|name> <Rbranch>:remotes/<Lbranch>

But again, what is the workflow? There are generally two ways of
fetching:

  1. I am tracking some remote with multiple branches. I give it a
     remote name (either by editing the config file or by using
     git-remote). When i want to get updates, I do "git fetch <name>",
     and then I can work with the <name>/* branches as I want (diffing,
     merging, etc).

  2. "Somehow" I found out about something interesting in a particular
     branch of a particular repo. I want to pull that in to see the
     work, so I use "git pull <repo> <branch>". Alternatively, if I
     prefer to fetch and examine before pulling (even though the merge
     can of course be cancelled easily), I can "git fetch <repo>
     <branch>", followed by "git diff HEAD FETCH_HEAD", followed by "git
     merge FETCH_HEAD".

It seems like you are getting caught up on using "git fetch" in
different ways that don't really make sense to its original use. So the
problem is not so much one of "fetch doesn't do what I want it to do" as
much as "it is easy to be confused about what it is I want to do."

-Peff

  parent reply	other threads:[~2008-04-09 20:35 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 [this message]
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
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=20080409203453.GA10370@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    /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).