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

Re: git fetch: where are the downloaded objects stored?

From
Jakub Narebski <jnareb@gmail.com>
Date
Mar 3, 2008, 16:59 UTC
Message-ID
<m3tzjnivzp.fsf@localhost.localdomain>
In-Reply-To
<4d8e3fd30803030633nf6266d5qab0df4ba4c539e0b@mail.gmail.com>
"Paolo Ciarrocchi" <paolo.ciarrocchi@gmail.com> writes:
Show 8 quoted lines
> On Mon, Mar 3, 2008 at 2:14 PM, Matthieu Moy <Matthieu.Moy@imag.fr> wrote:
>> "Paolo Ciarrocchi" <paolo.ciarrocchi@gmail.com> writes:
>>
>>> What is still not clear to me is where git is storing
>>> the objects downloaded during a git fetch operation.
>>
>>  git fetch downloads the objects to the object database, i.e.
>>  .git/objects/, usualy as a pack.
Downloading as individual objects ("exploded") or as a pack depends on
fetch.unpackLimit configuration.
 
Show 6 quoted lines
>>  Now, just "having" the objects locally doesn't change much, an object
>>  starts being really interesting if you have a reference (typically, a
>>  branch) pointing to it. "git fetch" will update the remote references
>>  (for example, origin/master), but won't touch the working tree, and
>>  won't do any merge, fast-forward or not, to a local branch. So, most
>>  likely, "git fetch" will be followed by either a merge or a rebase.

What is important git-fetch _always_ stores what it fetched in $GIT_DIR/FETCH_HEAD.

Then depending on configuration and command line options it updates
appropriate remote-tracking branches.  For example if you do one-shot
"git pull <remote> <branch>" git would not store fetched refs (heads)
in tracking branches: see git-fetch(1).
 
Show 7 quoted lines
> Yes, your explanation perfectly match my understanding.
> 
> I was, and I'm still, confused by the following sentence in the git merge
> documentation:
>
>   "A merge is always between the current HEAD and one or more
>    remote branch heads"

This "remote" is here invalid. Merge can merge in any ref, not only remote-tracking branches. "git merge <branch>" would merge given branch into current (HEAD) branch:

Before:
  1---2---3---4---5---6---7   <-- master <-- HEAD
               \
                \-A---B       <-- devel (or origin/master)
After "git merge devel"
  1---2---3---4---5---6---7---M   <-- master <-- HEAD
               \             /
                \-A---B-----/     <-- devel (or origin/master)
where 'M' is merge (multi-parent) commit.
> If I think to the following scenario:
> 
>  git fetch
>  git diff (to look at what I downloaded via git fetch)

Because you download _series_ of commits "git log" would be usually more useful than "git diff".

You can use <branch>@{1} for position of branch before fetch, or even ORIG_HEAD for position of HEAD branch before fetch (or pull).

>  git merge

I'm not sure if "git merge" without branch specified would work. "git pull" should, so perhaps "git merge" would too.

"git pull" would merge 'first' branch, or branch specified in branch/remote configuration.

-- 
Jakub Narebski
Poland
ShadeHawk on #git
Previous: Paolo Ciarrocchi
Message 12 of 12 in “git fetch: where are the downloaded objects stored?”
  1. Paolo CiarrocchiMar 3, 2008
  2. Matthieu MoyMar 3, 2008
  3. Paolo CiarrocchiMar 3, 2008
  4. Matthieu MoyMar 3, 2008
  5. Paolo CiarrocchiMar 3, 2008
  6. Nicolas PitreMar 3, 2008
  7. Paolo CiarrocchiMar 3, 2008
  8. Sergei OrganovMar 3, 2008
  9. Nicolas PitreMar 3, 2008
  10. Nicolas PitreMar 3, 2008
  11. Paolo CiarrocchiMar 3, 2008
  12. Jakub NarebskiMar 3, 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.