PHP开发质量控制之:git 本地钩子 pre-commit
使用 phpcs,phpcbf,php-cs-fixer 工具进行 php 规范自动检查修正。
长期使用下团队代码规范一致,贵在坚持。
使用前需要安装 phpcs,php-cs-fixer,phpcbf 工具。
#!/bin/sh PHPCS_BIN=phpcs PHPCBF_BIN=phpcbf PHPCSFIXER_BIN=php-cs-fixer PHPCS_CODING_STANDARD=PSR2 PHPCS_IGNORE="database/*,*.blade.php" PHPCS_FILE_PATTERN="\.(php)$" FILES=$(git diff --cached --name-only) BRANCH=$(git branch -vv | awk '$1=="*" {print $4}') echo "提交到 $BRANCH 分支" if [[ "$BRANCH" == "[origin/develop]" || "$BRANCH" == "[origin/master]" ]]; then echo "请不要向 $BRANCH 分支提交代码!" exit 1 fi if [ "$FILES" == "" ]; then exit 0 fi for FILE in $FILES do echo "$FILE" | egrep -q "$PHPCS_FILE_PATTERN" RETVAL=$? if [ "$RETVAL" -eq "0" ] then echo "$FILE"; if [ ! -f "$FILE" ];then echo "$FILE 不存在" continue fi PHPCS_OUTPUT=$($PHPCS_BIN $FILE --standard=$PHPCS_CODING_STANDARD --ignore=$PHPCS_IGNORE) PHPCS_RETVAL=$? if [ $PHPCS_RETVAL -ne 0 ]; then $($PHPCBF_BIN $FILE) $($PHPCSFIXER_BIN fix $FILE --rules=@$PHPCS_CODING_STANDARD) PHPCS_OUTPUT=$($PHPCS_BIN $FILE --standard=$PHPCS_CODING_STANDARD --ignore=$PHPCS_IGNORE) PHPCS_RETVAL=$? if [ $PHPCS_RETVAL -ne 0 ]; then echo $PHPCS_OUTPUT exit 1 fi fi fi done exit 0