编程与开发,写代码也是一种创作方式

通过 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

相关下载