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

Re: [QUESTION] Selective fetch possible?

From
RDRogan Dawes <lists@dawes.za.net>
Date
Mar 11, 2008, 07:26 UTC
Message-ID
<47D6341C.7030505@dawes.za.net>
In-Reply-To
<m3d4q2ywyx.fsf@localhost.localdomain>
Jakub Narebski wrote:
Show 26 quoted lines
> "Shawn O. Pearce" <spearce@spearce.org> writes:
> 
>> Filippo Zangheri <filippo.zangheri@yahoo.it> wrote:
>>> Is it possible to git-fetch only a portion of the tree
>>> of the specified repository, say, fetch only one directory or a
>>> subset of files matching some regular expression? This is currently
>>> - to my knowledge - only possible via wget iff the GIT repository
>>> has gitweb enabled. But that's just a workaround.
>> No.
>>
>> You can use a shallow clone to fetch only X commits back into
>> history on any branch, and you can also manually configure the
>> fetch specification in .git/config to only fetch specific branches,
>> but you must fetch the entire tree to get any of the files in it.
>>
>> If the repository is available by git:// protocol you may be able
>> to use git-archive to obtain a tarfile for just the directory you
>> want (service has to be enabled on the remote side) but that is
>> just a raw UNIX tar; there is no Git repository and no ability to
>> commit/fetch/push/diff/apply/log/etc.
> 
> Note that what you wanted is, I guess, something called partial
> checkout or subtree checkout.  This feature appears now and then in
> feature requests; lately Nguyen Thai Ngoc Duy (pclouds) offered to do
> this in "on subtree checkout" thread:
>   http://thread.gmane.org/gmane.comp.version-control.git/74915

I still believe that it could be done fairly easily by simply recording the SHA1's of the files and directories that are *not* checked out somewhere in the .git directory, and just reusing those when checking the working tree. i.e. rather than stat-ing a tree that was never checked out, get the known SHA1 for that tree from where it was recorded on checkout.

> The problem is twofold, as far as I understand it.  First, what to do
> if there is merge conflicts outside checked out (selected) directory?

This is something that has been repeated many times, and I fail to see how it can be an issue. How can there be a conflict in a directory that is not, and never has been, checked out, and therefore cannot have been modified?

The only possibility that I can see is if the directory has been renamed elsewhere, but in that case, it *is* effectively checked out (just with a different directory name).

> Second, how to make repository contain only relevant objects: git in
> many places assumes full connectivity, and that if it has an object it
> hass all objects depending on it.
> 
Yes, this is the big problem as I see it.
Rogan
Previous: Jakub NarebskiNext: Shawn O. Pearce
Message 4 of 7 in “[QUESTION] Selective fetch possible?”
  1. Filippo ZangheriMar 10, 2008
  2. Shawn O. PearceMar 10, 2008
  3. Jakub NarebskiMar 10, 2008
  4. Rogan DawesMar 11, 2008
  5. Shawn O. PearceMar 11, 2008
  6. Rogan DawesMar 11, 2008
  7. Filippo ZangheriMar 11, 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.