L'obiettivo è ottenere uno stato inequivocabile che può essere valutato in un comando di shell.
Ho provato git status
ma restituisce sempre 0, anche se ci sono elementi da impegnare.
git status
echo $? #this is always 0
Ho un'idea ma penso che sia piuttosto una cattiva idea.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
qualsiasi altro modo?
aggiornare con la seguente risoluzione, vedere il post di Mark Longair
Ho provato questo ma causa un problema.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Ottengo il seguente errore [: ??: binary operator expected
ora sto guardando l'uomo e provo il git diff.
=================== codice per la mia speranza e spero che risponda meglio ======================
#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)
, proprio come ti ho detto!
$(git status --porcelain)
. Inoltre, se vuoi inserire punti esclamativi nel tuo messaggio, dovrai usare virgolette singole anziché doppie - cioè dovrebbe essereecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
invece