Prevención de la duplicación de submodules manteniendo la separabilidad y permitiendo la composition del proyecto

He estado usando submodules para include proyectos dentro de "superproyectos".
Me encuentro con una molestia, aunque tengo el mismo submodule incluido varias veces en un super proyecto.

Por ejemplo, supongamos que tengo un proyecto llamado Helpers .
Luego tengo un proyecto, GeometryHelpers , que incluye Helpers como un submodule.
Luego tengo otro proyecto llamado AlgebraHelpers que incluye Helpers como un submodule.

Hasta ahora todo bien, esto me permite reutilizar mi código Helpers .

Sin embargo, ahora digo que tengo un proyecto llamado Math que tiene GeometryHelpers y AlgebraHelpers como submodules.
Ahora tengo dos copys de Helpers ( Math/GeometryHelpers/Helpers y Math/AlgebraHelpers/Helpers ).
Si tengo que cambiar algo en Helpers , entonces debo asegurarme de no olvidar actualizarlo en ambos lugares, o podría esperar que las cosas no estén sincronizadas.

Mi process actual de actualización si algo en Helpers cambia (lo que sucede regularmente) es:

 cd Math/GeometryHelpers/Helpers; git pull cd ..; git add -u; git commit; git push # update the pointer to Helpers in GeometryHelpers cd ../AlgebraHelpers/Helpers; git pull; cd ..; git add -u; git push # update the pointer to Helpers in AlgebraHelpers cd ..; git add -u; git push # update the pointers to AlgebraHelpers and GeometryHelpers in Math 

Parece que el caso ideal sería tener Matemáticas / Ayudantes, y que los Ayudantes de Math/AlgebraHelpers y los Math/AlgebraHelpers Math/GeometryHelpers usen las mismas Math/Helpers .
Pero para configurar algo como esto, parece que sería difícil mantener la capacidad de build AlgebraHelpers de forma independiente (es decir, no dentro de Matemáticas).

Realmente no quiero build bibliotecas e instalarlas en el sistema en alguna parte porque cuando estoy trabajando en GeometryHelpers y quiero actualizar algo en Helpers , tengo que abrir el proyecto Helpers , build la biblioteca e instalarlo en siempre que GeometryHelpers esté buscando.
Ese no es un process particularmente suave, especialmente porque Helpers está cambiando con frecuencia.

¿Hay una mejor manera de manejar esto?
Estoy usando CMake como mi sistema de compilation y todos estos proyectos son proyectos de C ++.

Una forma sería dejar de registrar Helpers SHA1 en los niveles (Algebra|Geometry)Helpers (es decir, no inicializar el submodule allí) y registrarlo en el nivel matemático (agregue Helpers como un submodule allí).
Pero eso no es práctico, ya que los diversos commits de (Algebra|Geometry)Helpers nunca sabrán qué SHA1 de Helpers se suponía que debían usar.

La otra opción sería comprobar si el script git new-workdir (en contrib de cualquier distribución de git desde git1.7.10) podría ayudar a evitar la duplicación del submodule de Helpers .
Ver " Submodules duplicates con Git ".

Aún necesitaría confirmar y enviar cada repository principal, pero al less usaría solo un Helpers en todos los repositorys principales.