Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git预提交钩子来检查假空格_Git - Fatal编程技术网

Git预提交钩子来检查假空格

Git预提交钩子来检查假空格,git,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中手动运行

我想制作一个预提交钩子,其中:

  • 如果我有虚假空间,禁止提交
  • 以其他方式允许它
这是我的密码

#!/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中手动运行脚本,我将获得“伪空格”。那太完美了。但是如果我把它作为预提交钩子运行,我总是得到“ok”


我的代码出了什么问题?

这里最重要的是,您需要将要提交的内容(而不是工作目录中的内容)与
标题
版本进行比较。使用
git diff--cached
(可以与
--check
混合使用)很容易做到这一点

作为一个较小的改进,
git diff--check
(带或不带
--cached
)已经:

如果发现问题,则以非零状态退出

(见附件)。因此,如果您愿意让差异本身显示在屏幕上:

#! /bin/sh
git diff --check --cached
作为pre-commit钩子的整体,应该足够了。如果要在没有空白错误的情况下运行其他测试:

#! /bin/sh
git diff --check --cached || exit $?
... additional tests here ...

应该可以做到。

我已经将其标记为迁移到StackOverflow(请耐心等待它得到适当的注意)
git
问题可能很难找到答案。为了将来的参考,请查看我们的元网站。谢谢你的回答!所以我很好地理解,问题是不使用--cached?是的。如果没有缓存的
--cached
,diff将当前工作目录(显示为新的或
b
版本)与暂存内容(旧的或
a
版本)进行比较。使用
--cached
,diff比较分段与