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

Re: [PATCH v2] Fix fetch/pull when run without --update-head-ok

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Oct 14, 2008, 15:57 UTC
Message-ID
<alpine.LNX.1.00.0810141148010.19665@iabervon.org>
In-Reply-To
<alpine.DEB.1.00.0810141145491.22125@pacific.mpi-cbg.de.mpi-cbg.de>
On Tue, 14 Oct 2008, Johannes Schindelin wrote:
Show 40 quoted lines
> Hi,
> 
> On Mon, 13 Oct 2008, Daniel Barkalow wrote:
> 
> > On Mon, 13 Oct 2008, Johannes Schindelin wrote:
> > 
> > > I actually understand now why the tests started failing: the change from 
> > > resolve_ref() to get_branch() as requested by Daniel are at fault: 
> > > get_branch() does not check if the branch has an initial commit.
> > > 
> > > I am actually regretting making this change.  Daniel, do you agree 
> > > that it might be better to change back to resolve_ref(), so that the 
> > > initial complaint (IIRC Han-Wen git pull'ed into a freshly initialized 
> > > repository with that utterly bogus "git pull origin master:master" 
> > > line) is not re-raised?
> > 
> > Is it, in fact, okay to fetch into the current branch if it's "yet to be 
> > born"? I feel like it shouldn't be, since you'll get exactly the same 
> > problem that you would if the branch already existed: the index reflects 
> > the previous state (in this case, it's empty), so git will show that 
> > you've staged removing all of the files, right? So this would make the 
> > check for --update-head-ok more strict than before, but I think the 
> > behavior change is correct.
> 
> I think 
> http://thread.gmane.org/gmane.comp.version-control.git/31351/focus=31544 
> is the best link to see what Han-Wen said.  Granted, it was a 
> misunderstanding on his part, but there have been quite a few people with 
> the same misunderstanding.
> 
> So what they did was
> 
> 	$ mkdir just-one-branch
> 	$ cd just-one-branch
> 	$ git init
> 	$ git remote add origin <url>
> 	$ git pull origin master:master
> 
> And this _will_ work correctly.  Except when using get_branch(NULL) 
> instead of the validating resolve_ref().

"git pull origin master:master" invokes "git fetch" with --update-head-ok, so it doesn't matter for this case what "git fetch" does without --update-head-ok.

The check would block:
$ git fetch origin master:master

but this also would fail to update the working directory and would leave the index as if you're removing everything.

	-Daniel
*This .sig left intentionally blank*
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 18 of 24 in “fetch: refuse to fetch into the current branch in a non-bare repository”
  1. fetch: refuse to fetch into the current branch in a non-bare repositoryJohannes Schindelin, Oct 11, 2008
  2. Junio C HamanoOct 11, 2008
  3. Shawn O. PearceOct 12, 2008
  4. Johannes SchindelinOct 13, 2008
  5. Shawn O. PearceOct 12, 2008
  6. Daniel BarkalowOct 12, 2008
  7. Fix fetch/pull when run without --update-head-okJohannes Schindelin, Oct 13, 2008
  8. Shawn O. PearceOct 13, 2008
  9. Johannes SchindelinOct 13, 2008
  10. Junio C HamanoOct 13, 2008
  11. Junio C HamanoOct 13, 2008
  12. Johannes SchindelinOct 13, 2008
  13. Daniel BarkalowOct 13, 2008
  14. Johannes SchindelinOct 14, 2008
  15. Shawn O. PearceOct 14, 2008
  16. Daniel BarkalowOct 14, 2008
  17. Johannes SchindelinOct 14, 2008
  18. Daniel BarkalowOct 14, 2008
  19. Johannes SchindelinOct 14, 2008
  20. Daniel BarkalowOct 14, 2008
  21. Daniel BarkalowOct 14, 2008
  22. Junio C HamanoOct 14, 2008
  23. pull: allow "git pull origin $something:$current_branch" into an unborn branchJunio C Hamano, Oct 14, 2008
  24. Daniel BarkalowOct 13, 2008

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.