我正在尝试为项目添加预提交挂钩,当我运行./.git/hook/pre-commit
时,它会给出正确的结果。
提交变量OUTPUT时始终为空。
#!/bin/bash
OUTPUT=`git diff | flake8 --diff`
if [ -z "${OUTPUT}" ]
then
echo "================== You are awesome ===================="
echo "${OUTPUT}"
exit 1
else
echo ""
echo "================== Your code stinks, Fix them ===================="
echo ""
echo "${OUTPUT}"
exit 1
fi
exit 1
答案 0 :(得分:1)
钩子在不同的环境中运行。
特别是PATH可能不会像您为用户设置的那样设置。
尝试使用您调用的可执行文件的完整路径,例如git
和flake8
,然后查看它是否有效。
答案 1 :(得分:0)
git diff
会显示未经暂停的更改,即不在提交中进行的更改。在pre-commit
挂钩中,除非您正在进行部分提交,否则输出将为空。
您想要的是git diff --staged
:它会向您显示您要提交的更改,这是您要使用flake8
检查的部分。
您可以尝试在钩子中运行git status
并查看"要提交的更改:"和#34;未提交的更改提交:"部分了解我的意思。
此外,您的exit 1
之一应该是exit 0
; - )。