用git钩子脚本在提交代码对php文件进行语法检查
在git版本库的 .git/hooks/ 目录下建立名为pre-commit的脚本文件, 它会在每次代码提交之前被调用
if git-rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
set -e
changed_files=git diff-index --cached --name-only $against --
for f in $changed_files ;do
ext=${f##*.}
if test “$ext” = “php” ;then
php -l $f
fi
done
有了这个脚本,就可以避免带有语法错误的文件被提交. 但上面的脚本有点小bug.
这几天发现从git库中删除文件时总是失败, 总是提示
Could not open input file: xxx.php
起初没太在意, 以为是版本库出现了什么损坏. 后来发现, 这种现象只发生在php文件上,删除其他的文件没有问题. 于是想起了钩子脚本pre-commit, 问题就出在这个脚本, 当我删除一个已经存在的php文件时, 这个脚本依旧会调用php -l
检查语法错误, 而实际上这个文件被删了,就会提示找不到文件.
只要在检查语法前加一行判断文件是否存在的条件就ok了.
if git-rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
set -e
changed_files=git diff-index --cached --name-only $against --
for f in $changed_files ;do
ext=${f##*.}
if test “$ext” = “php” ;then
if test -e “$f”;then
php -l $f
fi
fi
done
Posted via UltraBlog.vim.
Last modified on 2011-07-14