Цель состоит в том, чтобы получить однозначный статус, который можно оценить с помощью команды оболочки.
Я пытался, git status
но он всегда возвращает 0, даже если есть элементы для фиксации.
git status
echo $? #this is always 0
У меня есть идея, но я думаю, что это довольно плохая идея.
if [ git status | grep -i -c "[a-z]"> 2 ];
then
code for change...
else
code for nothing change...
fi
Любым другим путем?
обновите с последующим решением, см. сообщение Марка Лонгэйра
Я пробовал это, но это вызывает проблему.
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
Я получаю следующую ошибку [: ??: binary operator expected
сейчас я смотрю на мужчину и пробую git diff.
=================== код для моей надежды, и надеюсь, что лучший ответ ======================
#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)
, как я и говорил!
$(git status --porcelain)
. Кроме того, если вы хотите поместить восклицательные знаки в свое сообщение, вам нужно использовать одинарные кавычки, а не двойные кавычки - то естьecho 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
вместо этого