Celem jest uzyskanie jednoznacznego statusu, który można ocenić za pomocą polecenia powłoki.
Próbowałem, git status
ale zawsze zwraca 0, nawet jeśli są elementy do zatwierdzenia.
git status
echo $? #this is always 0
Mam pomysł, ale myślę, że to raczej zły pomysł.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
jakikolwiek inny sposób?
aktualizacja z następującym rozwiązaniem, patrz post Marka Longaira
Próbowałem tego, ale powoduje to problem.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Otrzymuję następujący błąd [: ??: binary operator expected
teraz patrzę na mężczyznę i wypróbowuję różnicę git.
=================== Kod dla mojej nadziei i miej nadzieję, że lepsza odpowiedź ======================
#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)
, tak jak powiedziałem!
$(git status --porcelain)
. Ponadto, jeśli chcesz umieścić wykrzykniki w swojej wiadomości, musisz użyć pojedynczych cudzysłowów zamiast podwójnych cudzysłowów - czyliecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
zamiast tego powinno być