Les Mikesell <lesmikesell@gmail.com> wrote on 08/14/2013 02:49:38 PM:

> On Wed, Aug 14, 2013 at 4:23 PM,  <dlellis@rockwellcollins.com> wrote:
> >
> > Now, in our case, we do stuff for aircraft,... wouldn't it be nice to
> > maintain living pedigrees with all similar models of aircraft?  Fix an issue
> > in one place and advertise it to all the others.  File externals give you
> > this.  It fits very well into the embedded safety critical world in the
> > "don't touch that code unless you have to" and "let's fix it once".
> > Refactoring code in this world just can't happen as often as you'dlike (its
> > also a chance to reinject bugs).
> >
> > Hope this helps!
> So the point is to intentionally pull the HEAD revision of a whole
> bunch of files together where each is located arbitrarily  and can
> change independently?   I guess that's about the opposite of the way I
> think of version control, so I can't suggest anything else.   Are
> there enough different 'top level' collections or a fast enough change
> that you can't simply copy the right files into place instead of
> having external references there?

No HEAD revisions, all files are pegged.  

For example, if everyone is linked to a common file (foo.c, revision 20, project A "pedigree") and a bug is fixed, each project will see that a fix has been made.  Each project has to make a decision: to remain on the current revision (no budget or schedule to update), update to the latest (if they have budget and schedule), or to "fork" (if they don't like the fix and have to implement a new feature).  This can happen any time, not necessarily when the file is committed.

Each new project inherits the externals from their baseline (they do not create new links or go out and search for reuse - that'd be a pain!)  So until a project decides to "fork" a file, they see (but not automatically receive) all the changes made to that file.  Nothing happens to your project without explicit action.  

Each file lives in a special area of the repository that identifies its pedigree.  Code your project writes automatically becomes usable by any other project.

This is the same approach Rational CMVC takes.

Hope this helps,