目标是获取一个可以在shell命令中评估的明确状态。
我尝试了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
还有其他方式吗?
使用以下解决方案进行更新,请参见Mark Longair的帖子
我尝试了这个,但它引起了一个问题。
if [ -z $(git status --porcelain) ];
then
echo "IT IS CLEAN"
else
echo "PLEASE COMMIT YOUR CHANGE FIRST!!!"
echo git status
fi
我遇到了以下错误:[: ??: 预期二元运算符
现在,我正在查看手册并尝试使用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)
周围加上双引号。另外,如果您想在消息中放入感叹号,则需要使用单引号而不是双引号 - 也就是说,应该是echo 'PLEASE COMMIT YOUR CHANGE FIRST!!!'
而不是 - Mark Longair$(git status --porcelain)
周围加上双引号”,就像我告诉过你的一样! - eckesgit status --porcelain
几乎是正确的。 你只是在调用git status
时缺少了一些双引号。第一行应该是if [ -z "$(git status --porcelain)" ]
。 双引号确保命令输出(可能包含空格)被视为-z
测试的单个参数。 - Chris B