On 7/24/08, James Pickens <jepicken@xxxxxxxxx> wrote: > Nguyen Thai Ngoc Duy <pclouds <at> gmail.com> writes: > > > I have not looked at non-builtin commands yet, but I think it's not > > a big deal. We have several rounds before this series is good enough ;) > > So in short, sparse prefix will be stored in config, core.sparsecheckout. > > you have three new commands to enter/update/leave sparse checkout: > > > > git clone --path=prefix # clone with sparse checkout > > git checkout --path=prefix # limit/update checkout paths > > git checkout --full # stop sparse checkout > > > > > First things first, thanks a lot for working on this feature. I have an > enormous project in CVS (144GB repo, containing 65000 directories and > 463000 files) that I've been wanting to convert to git for a while now, > and the lack of sparse checkouts was the only thing about git that was > standing in the way. The project is so big that checking out the whole > tree all the time is unworkable, and I think my coworkers would hang me > if I tried to make them use submodules. We already use sparse checkouts > in CVS to make it manageable, so sparse checkout support in git would > vastly simplify the transition. > > I played around with the patch briefly, and I have a couple of comments > on the interface. > > First, I would want a capability to checkout a directory non-recursively. > I.e., checkout directory A/B, without also checking out directory A/B/C. > Perhaps a modifier could be added to a path element to make it > non-recursive. This one is difficult (and may probably produce more intrusive patch). Let's see what I can do. > Second, I would want a capability to checkout and release directories > incrementally, similar to how we do it in cvs. For example, I might do > the following in cvs: > > $ cvs co -l A # Checkout dir A non-recursively > $ cd A > $ cvs up -l -d B1 B2 # Checkout dirs A/B1 and A/B2 non-recursively > $ cd B1 > $ cvs up -d C1 C2 # Checkout dirs A/B1/C1 and A/B1/C2 recursively > (Oops, didn't need C2) > $ cvs release -d C2 > At this point I would have the following directory tree, assuming the C1 > directory in the repo contained a D1 directory: > > A/ > A/B1/ > A/B1/C1/ > A/B1/C1/D1/ > A/B2/ > > A similar capability in git would be much appreciated. You can do that with "git checkout --path" (non-recursive checkout aside): $ git checkout --path=A # checkout full A $ git checkout --path=A/B1/C1 # no, limit to A/B1/C1 only $ git checkout --path=A/B1/C1:A/B2 # extend to A/B2 too > > Finally, I noticed what I think is a bug: if you do a partial checkout of > a non-existing directory, you just get an empty tree. I would expect to > get an error message in that case. Thanks. > I hope this is helpful, and thanks again for working on this. > > James > > > > -- > 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 > -- Duy -- 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