我正在尝试(但失败得很惨)制作一个 git pre-commit 钩子来检查我修改的文件中是否存在 var_dump 并在找到时退出。我遇到的问题是它似乎总是中止提交。这是我的预提交文件的内容:
VAR=$(git diff | grep -w "var_dump")
if [ -z $VAR ]; then
echo "You've left a var_dump in one of your files! Aborting commit..."
exit 1
fi
首先,请注意,plaingit diff
给出了工作树和索引之间的区别(即仍然可以暂存的内容),而不是即将提交的内容。用于git diff --cached
查看将要提交的内容。
我在实验时遇到的第二件事是if [ -z $VAR ]
直接使用会引发错误,因为输出+
开头的git diff
是由 Bash 解释的。确保$VAR
用引号括起来以防止这种情况。
至于脚本,如果$VAR
为空,您忘记否定测试。如果 grep 的输出为空,则找不到“var_dump”,钩子应该返回成功。你想要的情况是如果它不为空,这意味着找到了“var_dump” ,它应该中止提交。
全部一起:
VAR=$(git diff --cached | grep -w "var_dump")
if [ ! -z "$VAR" ]; then
echo "You've left a var_dump in one of your files! Aborting commit..."
exit 1
fi