2012-05-31 56 views
4

我正在尝试(但失败),使得git预提交钩子检查我的已修改文件中是否存在var_dump,如果找到,就退出。我遇到的问题是它似乎始终放弃提交。这里是我的预提交文件的内容:当var_dump存在时,终止git预提交钩子

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 

回答

8

首先,请注意,普通git 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 
+0

真棒!谢谢您的帮助。 –

+2

@KyleDecot没问题。 :D我在这个网站上的第一个实际答案!研究很有趣,哈哈。 纠错:二。我忘了。 :P – vergenzt

+0

即使“var_dump”在注释中,这也会停止? – Znarkus