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

Re: RFC: git pull <remote> making an octopus?

From
Junio C Hamano <junkio@cox.net>
Date
Aug 14, 2006, 21:45 UTC
Message-ID
<7vk65bdm9f.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20060814175523.GC16821@mellanox.co.il>
"Michael S. Tsirkin" <mst@mellanox.co.il> writes:
Show 6 quoted lines
> Quoting r. Michael S. Tsirkin <mst@mellanox.co.il>:
>> So it seems git pull behaves differently depending on whether
>> the origin pull line is first or not?
>
> Where do I find the code that decides whether to make an octopus
> or many fetches?

After "git fetch" that is called from "git pull", $GIT_DIR/FETCH_HEAD lists all the refs that were fetched, and each line has not-for-merge marker (or empty) in the second column (SHA1 <TAB> marker <TAB> description of what the remote ref is). The ones not marked with the not-for-merge marker are merged into the current head, so if you have more than one that lack not-for-merge marker, you end up with an octopus.

The rule (the implementation might be broken but nobody other than you found the breakage so far) to mark not-for-merge is:

 - the refspecs are either given on the command line, or from
   shorthand file (.git/remotes/, or .git/branches/) but never
   from both at the same time;
 - when dealing with the refspecs from the command line all of
   them are for merge;
 - when dealing with the refspecs from the shorthand
   (.git/remotes), the one on the first "Pull: " line is for
   merge and everything else is not.

The case statement in the loop you were touching in your patch we discussed earlier had four arms (+ref, .+ref, .ref, and ref). Pluses come from the original refspec given by the user, either from short-hand file or command line. Dot is prepended when reflist is prepared by get_remote_refs_for_fetch which in turn calls canon_refs_list_for_fetch (git-fetch sources git-parse-remote and these shell functions are defined there).

Previous: Michael S. TsirkinNext: Alex Riesen
Message 5 of 10 in “RFC: git pull <remote> making an octopus?”
  1. Michael S. TsirkinAug 14, 2006
  2. Junio C HamanoAug 14, 2006
  3. Michael S. TsirkinAug 14, 2006
  4. Michael S. TsirkinAug 14, 2006
  5. Junio C HamanoAug 14, 2006
  6. Alex RiesenAug 15, 2006
  7. Junio C HamanoAug 15, 2006
  8. Junio C HamanoAug 17, 2006
  9. Alex RiesenAug 17, 2006
  10. Michael S. TsirkinAug 17, 2006

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.