Git: verifica programáticamente si todos los submodules apuntan a la confirmación correcta

En mi script de construcción me gusta comprobar si todos los submodules tienen la versión correcta desprotegida.

git submodule status me da '+' o '-' pero el código de salida siempre es 0

Utilizo un file dos-batch y me gustaría tener un código de error (% ERRORLEVEL%) 0 si todos los submodules apuntan a la confirmación correcta o! = 0 si al less uno apunta a una versión diferente.

Ejemplo de salida del estado del submodule git

 $ git submodule status 634e661fd09059a7337c930a9fc5489564dd4ba6 sub1 (heads/master) +dceaedd21997d39ab043b0a3a02626fd38234aae sub2 (dceaedd) b1f1a58d912e0ab6a885e00cece601f1712d59a1 sub3 (heads/master) 

Sub2 ha comprobado una versión incorrecta denotada por '+'

De la documentation:

Cada SHA-1 tendrá el prefijo – si el submodule no está inicializado, + si la confirmación del submodule actualmente desprotegido no coincide con el SHA-1 encontrado en el índice del depósito que lo contiene y con U si el submodule tiene conflictos de fusión.

Pruebe algo como esto:

 git submodule status | findstr "^-" if %errorlevel%==1 exit /b 0 exit /b 1 

|findstr "^-" searchá en la salida el signo less (debe escapingse con ^ ). Si - no está presente, findstr establecerá errorlevel en 1. Entonces, estamos haciendo exit /b 0 que invertirá el nivel de error en 0. De lo contrario, se ejecutará exit /b 1 y el errorlever se establecerá en 1.