我想制作一个预先提交的钩子:
这是我的实际代码
#!/bin/sh
#
# Vérifier avant un commit que l'on n'a pas mis de spurious spaces.
a=$(git diff --check | wc -c)
if [ $a -gt 0 ]
then
echo "Spurious space"
exit 1
else
echo "ok"
fi
如果我在带有虚假空格的diff中手动运行脚本,我会获得“Spurious space”。那是完美的。但如果我将它作为预提交钩子运行,我总是获得“ok”。
我的代码出了什么问题?
答案 0 :(得分:2)
最重要的是,您需要比较HEAD
修订版中的要提交的内容,而不是工作目录中的内容。这可以通过git diff --cached
轻松完成(可以与--check
混合使用。)
作为较小的改进,git diff --check
(有或没有--cached
)已经:
如果发现问题,则退出非零状态。
(见the documentation)。因此,如果你愿意让差异本身显示在屏幕上:
#! /bin/sh
git diff --check --cached
应该足以作为整个预提交钩子。如果您想在没有空格错误的情况下运行其他测试:
#! /bin/sh
git diff --check --cached || exit $?
... additional tests here ...
应该这样做。