6

我正在尝试(但失败得很惨)制作一个 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
4

1 回答 1

11

首先,请注意,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 
于 2012-05-31T20:05:44.647 回答