El objetivo es obtener un estado inequívoco que pueda evaluarse en un comando de shell.
Lo intenté git status
pero siempre devuelve 0, incluso si hay elementos para confirmar.
git status
echo $? #this is always 0
Tengo una idea pero creo que es una mala idea.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
¿cualquier otra forma?
actualizar con la siguiente resolución, ver la publicación de Mark Longair
Intenté esto pero causa un problema.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Obtuve el siguiente error [: ??: binary operator expected
ahora, estoy mirando al hombre y pruebo el git diff.
=================== código para mi esperanza, y espero una mejor respuesta ======================
#if [ `git status | grep -i -c "$"` -lt 3 ];
# change to below code,although the above code is simple, but I think it is not strict logical
if [ `git diff --cached --exit-code HEAD^ > /dev/null && (git ls-files --other --exclude-standard --directory | grep -c -v '/$')` ];
then
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
exit 1
else
exit 0
fi
$(git status --porcelain)
, como te dije!
$(git status --porcelain)
. Además, si desea poner signos de exclamación en su mensaje, deberá usar comillas simples en lugar de comillas dobles, es decir, debería serecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
en su lugar