为什么Git commit -a(和git add,然后是git commit)没有触发可执行的预提交钩子

时间:2011-09-16 15:30:00

标签: git

我有一个我正在使用的回购,没有任何其他钩子。今天,在让console.log多次启动dev的尴尬之后,我提出了以下预提交钩子:

#!/bin/sh

count=`git diff | grep -i 'console\.' | wc -l | awk '{print $1}'`
if [[ "$count" -ge 1 ]]; then
echo " remove any console statements in javascript sources"
  exit 1
fi

脚本本身工作正常,只要我使用'git commit filename',git就会触发。如果我通过'git add'添加文件,或者如果我'git commit -a'(我假设只是添加了所有修改过的文件,然后运行提交),它就不会触发。为什么会这样?我不是git master,而且我已经在谷歌上做了一些狩猎,但还没有提出任何具体的建议。

1 个答案:

答案 0 :(得分:1)

每次在repo上提交时,都会触发/执行预提交钩子。它与文件添加到索引的方式无关。我认为你在解雇和脚本做你想要的事情之间会感到困惑。添加echo外部条件以查看脚本是否始终被触发。

我没有尝试过您发布的脚本,但我认为问题可能出在git diff - 它应该是git diff --cached

更新

我已确认您必须使用--cached