目标是获得可以在 shell 命令中评估的明确状态。
I tried 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
测试是否输出的替代方法git status --porcelain
为空就是分别测试你关心的每个条件。例如,人们可能并不总是关心输出中是否存在未跟踪的文件git status
.
例如,要查看是否有任何本地未暂存的更改,您可以查看以下返回码:
git diff --exit-code
要检查是否有任何已暂存但未提交的更改,您可以使用以下返回代码:
git diff --cached --exit-code
最后,如果您想知道工作树中是否有未被忽略的未跟踪文件,您可以测试以下命令的输出是否为空:
git ls-files --other --exclude-standard --directory
Update:您在下面询问是否可以更改该命令以排除输出中的目录。您可以通过添加排除空目录--no-empty-directory
,但要排除该输出中的所有目录,我认为您必须过滤输出,例如:
git ls-files --other --exclude-standard --directory | egrep -v '/$'
The -v
to egrep
表示仅输出与模式不匹配的行,并且模式匹配任何以 a 结尾的行/
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)