2022-04-30 20:16:09
通过Composer的scripts功能设置Git的pre-commit钩子,可实现代码检查流程的自动化与统一管理。以下是具体操作步骤及注意事项:
1. 创建pre-commit脚本文件在项目根目录下创建scripts/pre-commit文件,内容示例如下:
#!/bin/bashecho "Running pre-commit checks..."# PHP语法检查git diff --cached --name-only --diff-filter=ACM | grep '.php$' | xargs -r php -l# 其他检查(示例:PHP-CS-Fixer、PHPStan)# vendor/bin/php-cs-fixer fix --dry-run --using-cache=no# vendor/bin/phpstan analyse src/if [ $? -ne 0 ]; then echo "Pre-commit checks failed." exit 1fiecho "All checks passed."exit 0赋予执行权限:
chmod +x scripts/pre-commit2. 配置composer.json的scripts字段在composer.json中添加post-install-cmd和post-update-cmd,用于自动链接钩子。
方案一:直接复制脚本(简单场景)"scripts": { "post-install-cmd": [ "cp scripts/pre-commit .git/hooks/pre-commit" ], "post-update-cmd": [ "cp scripts/pre-commit .git/hooks/pre-commit" ]}适用场景:项目较小,无需复杂逻辑。
方案二:使用自定义PHP类(推荐).git/hooks目录特性Git钩子存储在.git/hooks/下,不会被版本控制。团队成员需运行composer install或composer update触发钩子安装。
团队协作说明在项目文档(如README)中明确告知开发者:
首次克隆后需执行composer install。
钩子依赖的代码检查工具(如PHPStan、PHP-CS-Fixer)需通过Composer安装。
性能优化
避免在钩子中执行耗时操作(如完整代码分析),推荐使用--dry-run模式快速检查。
针对特定文件类型(如.php)过滤,减少不必要的检查。
权限问题
确保.git/hooks/pre-commit具有可执行权限(chmod +x)。
若使用自定义类,确认PHP进程有权限访问脚本文件。
通过上述步骤,可实现Git pre-commit钩子的自动化配置,确保团队代码质量检查流程的一致性。