目標は、シェルコマンドで評価できる明確なステータスを取得することです。
試しました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
その他の方法で?
次のソルブで更新します。MarkLongairの投稿を参照してください
これを試しましたが、問題が発生します。
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!!!'
代わりに使用する必要があります