Re: [QUESTION] Selective fetch possible?
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