git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] pull: refuse complete src:dst fetchspec arguments

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Oct 21, 2009, 00:15 UTC
Message-ID
<alpine.LNX.2.00.0910202001050.14365@iabervon.org>
In-Reply-To
<BLU0-SMTP97AA2287062D9A104101C8AEC00@phx.gbl>
On Tue, 20 Oct 2009, Sean Estabrooks wrote:
Show 25 quoted lines
> On Tue, 20 Oct 2009 20:23:06 +0200
> Thomas Rast <trast@student.ethz.ch> wrote:
> 
> Hi Thomas,
> 
> > git-pull has historically accepted full fetchspecs, meaning that you
> > could do
> > 
> >   git pull $repo A:B
> > 
> > which would simultaneously fetch the remote branch A into the local
> > branch B and merge B into HEAD.  This got especially confusing if B
> > was checked out.  New users variously mistook pull for fetch or read
> > that command as "merge the remote A into my B", neither of which is
> > correct.
> > 
> > Since the above usage should be very rare and can be done with
> > separate calls to fetch and merge, we just disallow full fetchspecs in
> > git-pull.
> 
> It is however a handy shortcut to be able to specify the full refspec
> and specify where you want the head stored locally.  It seems a shame to
> throw away that functionality because of one confusing case.   Wouldn't
> it be better to test of the confusing case and instead error out if the
> local refname is already checked out?

Surely, "where you want the head stored locally" is somewhere that's information about a remote repository, and therefore under "refs/remotes/" (or "refs/tags/" or something) and therefore not possible to be checked out (in the "HEAD is a symref to it" sense).

I don't think it should be possible to fast-forward or create a local branch from a remote branch while simultaneously merging it into the currently-checked-out local branch.

Actually, I think it would be good to prohibit fetching into a new or existing local branch, whether or not it is checked out. We'd probably need to provide a plumbing method of doing a fetch, though, for script environments that aren't using the normal porcelain meanings of refs/ subdirectories. (Defining a bare repo with --mirror as not having local branches, of course)

	-Daniel
*This .sig left intentionally blank*
Previous: Junio C HamanoNext: Sean Estabrooks
Message 6 of 21 in “pull: refuse complete src:dst fetchspec arguments”
  1. pull: refuse complete src:dst fetchspec argumentsThomas Rast, Oct 20, 2009
  2. Thomas RastOct 20, 2009
  3. Wesley J. LandakerOct 20, 2009
  4. Sean EstabrooksOct 20, 2009
  5. Junio C HamanoOct 20, 2009
  6. Daniel BarkalowOct 21, 2009
  7. Sean EstabrooksOct 21, 2009
  8. Daniel BarkalowOct 21, 2009
  9. Sean EstabrooksOct 21, 2009
  10. Björn SteinbrinkOct 21, 2009
  11. Daniel BarkalowOct 21, 2009
  12. Thomas RastOct 21, 2009
  13. Jeff KingOct 23, 2009
  14. Daniel BarkalowOct 23, 2009
  15. Jeff KingOct 24, 2009
  16. Junio C HamanoOct 24, 2009
  17. Thomas RastOct 21, 2009
  18. Thomas RastNov 15, 2009
  19. Junio C HamanoNov 15, 2009
  20. Nanako ShiraishiDec 29, 2009
  21. Junio C HamanoDec 29, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.