Asegúrate de que el submodule siempre apuntó a un compromiso válido

Un error común con los submodules es cometer en el superproyecto un hash de subproyecto apuntando a un compromiso que no es alcanzable por todos los que usan el superproyecto (por ejemplo, el compromiso puede existir solo en la máquina personal de alguien).

Me gustaría auditar un historial completo para asegurarme de que cada compromiso de subproyecto al que se haga reference en el superproyecto exista realmente en un repository remoto determinado. ¿Hay una buena manera de hacer eso?

Puedes probar este proyecto de GitHub git-pre-push-submodule-check (de Konrad Malawski aka ktoso ) que hace el chequeo (script de ruby):

A partir de ahora, es posible que desee utilizar pom en lugar de otros methods de inserción, así es como sería:

Cuando tiene cambios no utilizados en los submodules:

 $ git pom Checking [styles-common] submodule for unpushed commits... ********************************************************** You have 2 unpushed commits within styles-common: 1a87491 added more fluffy icons bd40c09 flash now has nice round corners ********************************************************** Aborting push. 

Cuando no tiene cambios no utilizados en los submodules:

 $ ./check_submodule_pushed.rb Checking [styles-common] submodule for unpushed commits... Seems all submodule commits you refer to are reachable, let's push! 

Pero mi punto es: no conozco una forma nativa de comprobar si un submodule ha sido empujado antes de empujar su repository padre.