Le but est d'obtenir un statut sans ambiguïté qui peut être évalué dans une commande shell.
J'ai essayé git status
mais il renvoie toujours 0, même s'il y a des éléments à valider.
git status
echo $? #this is always 0
J'ai une idée mais je pense que c'est plutôt une mauvaise idée.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
d'une autre manière?
mise à jour avec la résolution suivante, voir l'article de Mark Longair
J'ai essayé cela mais cela pose un problème.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
J'obtiens l'erreur suivante [: ??: binary operator expected
maintenant, je regarde l'homme et j'essaye le git diff.
=================== code pour mon espoir, et j'espère mieux répondre =======================
#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)
, comme je vous l'ai dit!
$(git status --porcelain)
. De plus, si vous souhaitez mettre des points d'exclamation dans votre message, vous devrez utiliser des guillemets simples plutôt que des guillemets doubles - c'est-à-dire qu'il devrait l'être à laecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
place