Git pre-commit hook来检查虚假空间

时间:2014-01-16 18:51:58

标签: git

我想制作一个预先提交的钩子:

  • 如果我有虚假空间,禁止提交
  • 以其他方式允许。

这是我的实际代码

#!/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”。

我的代码出了什么问题?

1 个答案:

答案 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 ...

应该这样做。