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