Jakub Narebski wrote:
"Shawn O. Pearce" <spearce@xxxxxxxxxxx> writes:
Filippo Zangheri <filippo.zangheri@xxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html