O objetivo é obter um status inequívoco que possa ser avaliado em um comando shell.
Eu tentei, git status
mas sempre retorna 0, mesmo se houver itens a serem confirmados.
git status
echo $? #this is always 0
Eu tenho uma ideia, mas acho que é uma péssima idéia.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
qualquer outra maneira?
atualizar com a seguinte solução, consulte a publicação de Mark Longair
Eu tentei isso, mas isso causa um problema.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Estou tendo o erro a seguir [: ??: binary operator expected
agora, estou olhando para o homem e tente o diff do git.
=================== código para minha esperança, e espero uma resposta melhor ======================
#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 eu disse!
$(git status --porcelain)
. Além disso, se você quiser colocar pontos de exclamação em sua mensagem, você vai precisar usar aspas simples em vez de aspas duplas - ou seja, ele deve serecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
em vez