【发布时间】:2011-02-28 07:34:59
【问题描述】:
目标是获得可以在 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
我收到以下错误[: ??: 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
【问题讨论】:
-
在更新的部分中,您似乎实际上并没有按照eckes 在his answer 中的建议进行操作——正如他所说,您需要在
$(git status --porcelain)周围加上双引号。此外,如果您想在消息中添加感叹号,则需要使用单引号而不是双引号 - 即应该改为echo 'PLEASE COMMIT YOUR CHANGE FIRST!!!' -
正如马克所说:你需要在
$(git status --porcelain)周围加上双引号,就像我告诉你的那样! -
如果不包含部分答案,这个问题会更有用。
-
@9nix00 做你被告知的事情并编辑和修复上面的 shell 脚本中的错误: BUG: if [ -z $(some command) ] FIX: if [ -z "$(some命令)”]
标签: git git-status