¿Cómo lograr lo siguiente con Git?

Planteamiento del problema

Toda la base de código era accesible para todos hasta ahora. Ahora necesito hacer que las personas obtengan el código de solo aquellos modules en los que trabajarán, para otros modules obtendrán una biblioteca como lib. Suponiendo que tenemos dos modules en este momento

thinkbot (CABEZA)

-> assemblebot (tree / subdir)

-> include -> source -> lib -> obj 

-> vpl (tree / subdir)

  -> include -> source -> lib -> obj 

-> include

-> fuente -> bin

Ahora, si alguien está trabajando en el module vpl, obtendrá la carpeta include y source que contiene el código y desde el module assemblebot obtendrá una lib. Entonces, cuando haga cambios y comstack desde HEAD, las cosas le saldrán bien.

Chicos, ¿cómo implemento esto en Git? Consejos sobre qué leer? Los fragments de commands serían geniales?

Por el momento, la única forma en que puedo pensar es mediante el uso de submodules . Los dos modules (assemblebot, vpl) serían cada uno un submodule, y el rest del tree estaría en el superproyecto.

Esto significa esencialmente que los dos modules tendrían que estar en repositorys separados, y luego en el repository maestro, el git submodule init git://foo.com/assemblebot.git .

No estoy seguro de que esto valga la pena en general. No es uno de los puntos fuertes de git (de hecho, es lo único que creo que necesita mejorar).

Se está trabajando en un mejor soporte para los pagos parciales (clones estrechos y dispersos ).

Editar: Teniendo en count que vpl y assemblebot dependen de include y source, quizás sea mejor tener include y source como submodules de los repositorys vpl y assemblebot. Sin embargo, estos no son proyectos separados, y lo que git hace es rastrear el contenido del proyecto. No veo una razón por la cual estos modules deban separarse. ¿Tal vez solo les diga a los desarrolladores que no toquen el código del otro?