通过 GIT 钩子实现 PHP 格式整理与语法校验
步骤概括
- 【下载phpcbf】到本地目录(下载地址见文档底部)
> 例如:
> Linux: ~/.composer/vendor/bin/phpcbf
> Windows: c:spacesoftsystemphpcbf.phar
- 【创建hooks】或修改hooks文件:.git/hooks/pre-commit
- 【复制下方脚本】到pre-commit
- 【修改路径】代码中phpcbf和php
Windows环境注意:
- 需填写完整路径,且“\”需要转义,例如:c:\\space\\soft\\system\\php\\php
- 调用phpcbf失败的办法:可直接指定php路径来调用执行phpcbf,例如:c:\\space\\soft\\system\\php\\php c:\\space\\soft\\system\\phpcbf.phar $file --standard=PSR2
Linux 环境注意:
- 需将钩子文件赋予执行权限,否则将无法执行: chmod 700 .git/hooks/pre-commit
LINUX版本脚本内容(windows版需要按上述步骤替换代码中phpcbf和php的路径)
脚本
pre-commit
> windows版需要按上述步骤替换代码中phpcbf和php的路径
#!/bin/bash
files=$(git diff --cached --name-only | grep -E '\.php$')
echo $files
# 如果文件列表为空,退出执行环境,继续执行commit操作
if [[ $files = "" ]] ; then
exit 0
fi
failed=0
# 循环文件列表
for file in ${files}; do
if [ ! -e $file ] ; then
continue
fi
grep -E "#test|# test| dd\(|}dd\(|;dd\(|\tdd\(|^dd\(" $file > /dev/null
if [ $? -eq 0 ]; then
echo "❌ Found debug code!"
exit 1
fi
~/.composer/vendor/bin/phpcbf $file --standard=PSR2
if [[ $? != 0 ]] ; then
git add $file
git commit
fi
git show :$file | php -l $file
if [[ $? != 0 ]] ; then
failed=1
fi
done;
# 有文件未通过检验,退出执行环境,中断commit操作
if [[ $failed != 0 ]] ; then
echo "❌ ESLint failed, git commit denied"
fi
exit $failed