Tujuannya adalah untuk mendapatkan status tidak ambigu yang dapat dievaluasi dalam perintah shell.
Saya mencoba git status
tetapi selalu mengembalikan 0, bahkan jika ada item yang dikomit.
git status
echo $? #this is always 0
Saya punya ide tapi saya pikir itu ide yang buruk.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
ada cara lain?
perbarui dengan pemecahan berikut, lihat posting Mark Longair
Saya mencoba ini tetapi menyebabkan masalah.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Saya mendapatkan kesalahan berikut [: ??: binary operator expected
sekarang, saya melihat pria itu dan mencoba git diff.
=================== kode untuk harapan saya, dan berharap jawaban yang lebih baik ======================
#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)
, seperti yang saya katakan!
$(git status --porcelain)
. Juga, jika Anda ingin menempatkan tanda seru dalam pesan Anda, Anda harus menggunakan tanda kutip tunggal daripada tanda kutip ganda - yaitu harusecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
sebaliknya