Subject: Re: question (possibly) on git subtree/submodules

From: Chris Packham <[email-masked]>
Date: Fri, 23 Jul 2010 09:56:38 -0700

Hi,

On 23/07/10 07:00, Maurizio Vitale wrote:
> 
> I'm new to git and have read the recent thread on subtree support.
> I'm not sure they (or git submodules) offer what I'm looking for.
> Here's the scenario:
>        - I have a large monolithic code base, all in my repository (e.g.
>          I don't need to link in external repositories, which is what I
>          understand submodules offer
>        - I'd like to be able to clone only a small fraction of the
>          repository (say an arbitrary directory or even a single file)
>          in order to make small changes
>        - these directories are not known when the full repository is set
>          up.
>        - commits to the part I've checked out should show in the history
>          of any clone that includes the part, up to the full repository
>        - ideally, I should be able to incrementally clone portions (e.g.
>          I've checked out path/dir_A and realize I need to modify
>          path/dir_B as well).
>          these additional clones should be in whatever branch I switched
>          to after the initial checkouts.
> 
> Assuming the above makes any sense (in general or in git), is there
> anything in git that would help me doing what I'm looking for?
> Thanks,
> 
>         Maurizio 

The short answer is no. Nothing git has currently will let you clone a
subset of files. Shallow clones exist if you want all the code and the
last X changes. The reason for this is git, like other DVCSes, tracks
_changes_ rather than _files_ this is something that took me a while to
get my head around when I was learning git.

The best advice I've seen is to actually take your repository and use
git filter-branch to create several smaller repositories (or depending
on your desire for retention of history just create new repos). You can
then use submodules or subtrees to stitch these back together into a
super project to which you can add the smaller repositories as needed
(note: I have never used subtrees so I'm not 100% sure if what I'm
saying applies to them) .

We use this model with submodules at $dayjob and it works quite well for us.