Gestionar un set de repositorys relacionados relativos en Git

Tengo un set de repositorys relacionados que quiero administrar.

Los datos que deseo almacenar son "proyectos" que consisten en "bibliotecas" que consisten en "unidades". Cada biblioteca se almacena en una subcarpeta del proyecto y cada unidad se almacena en una subcarpeta de una biblioteca.

Para poder reutilizar bibliotecas y unidades entre varios proyectos, planeo almacenarlos de acuerdo con este esquema:

repositories/projects/project1 repositories/projects/project2> repositories/projects/project... repositories/libraries/library1 repositories/libraries/library2 repositories/libraries/library... repositories/units/unit1 repositories/units/unit2 repositories/units/unit... 

Me gustaría hacer reference relativamente a las bibliotecas utilizadas en un proyecto (por ejemplo, utiliza ../../libraries/library1 ) y también hacer reference a una unidad en una biblioteca de manera relativamente ../../libraries/library1 .

Las bibliotecas y unidades solo se pueden modificar modificando un proyecto que las contenga. Por lo tanto, la biblioteca y los repositorys de unidades podrían estar vacíos si fuera necesario.

El repository en el server debe tener el mismo aspecto (el mismo layout de carpetas).

Ya he intentado usar submodules y el enfoque "leer tree / subtree fusionar" pero no he podido encontrar una manera de especificar las URL relativas a los repositorys en el caso del submodule y de impulsar los cambios en el enfoque de tree de lectura.

Lo que me gustaría lograr es que si reviso project1, también busque todas las bibliotecas y unidades necesarias, y si cambio una biblioteca o unidad a través de un proyecto, estos cambios pueden volver a enviarse fácilmente al server.

Los submodules son el path a seguir y permiten URL relativas.

Un submodule puede especificar otro submodule URL relativo a la URL de origin del superproyecto. Entonces en project1 , usa lo siguiente

 git submodule add ../library1 git submodule --init update 

Y debería estar bien: library1 se verificará en el directory de project1, siendo su repo original al lado de project1.