CaptainHook 是一个 Composer 插件,用于管理 Git 钩子,通过在 composer.json 中定义钩子脚本并自动配置到 .git/hooks 目录,实现团队开发环境的一致性;安装命令为 composer require --dev captainhook/captainhook,随后运行 vendor/bin/captainhook configure --force 生成 captainhook.json 配置文件;在该文件中可设置 pre-commit 钩子,例如执行 phpcs 进行代码检查 { "pre-commit": { "enabled": true, "actions": [ { "action": "vendor/bin/phpcs", "options": ["--standard=PSR12", "src/", "tests/"] } ] }},若检查失败则阻止提交;同样可添加 PHPStan 等工具进行静态分析;新成员克隆项目后只需执行 composer install 即可自动启用钩子;临时跳过钩子可用 git commit --no-verify -m "跳过钩子提交",但应谨慎使用。

在现代PHP项目开发中,保持代码质量和一致性非常重要。通过在提交代码前自动运行代码检查,可以有效防止低级错误和格式问题进入版本库。使用 CaptainHook 和 Composer 可以轻松实现 Git 钩子的自动化管理,特别是 pre-commit 钩子来执行静态分析工具(如 PHP_CodeSniffer、PHPStan 等)。
什么是 CaptainHook?
CaptainHook 是一个用于管理 Git 钩子的 Composer 插件。它允许你在 composer.json 中定义钩子脚本,并在安装依赖时自动配置到项目的 .git/hooks 目录中。这样团队成员无需手动设置钩子,保证开发环境的一致性。
安装 CaptainHook
在项目根目录下运行以下命令,通过 Composer 安装 CaptainHook:
composer require --dev captainhook/captainhook
安装完成后,CaptainHook 会自动注册为 Composer 插件,并监听相关事件。
初始化 CaptainHook 配置
首次使用需要生成默认配置文件。运行:
vendor/bin/captainhook configure --force
该命令会生成一个 captainhook.json 文件,位于项目根目录。这个文件用来定义哪些 Git 钩子需要启用以及它们的执行逻辑。
配置 pre-commit 自动代码检查
编辑 captainhook.json,添加 pre-commit 钩子,让它在每次提交前运行代码检查工具。假设你已安装了 phpcs(PHP_CodeSniffer):
{
"pre-commit": {
"enabled": true,
"actions": [
{
"action": "vendor/bin/phpcs",
"options": ["--standard=PSR12", "src/", "tests/"],
"conditions": []
}
]
}
}
说明:
- enabled: true 表示启用 pre-commit 钩子
- action 指定要运行的命令
- options 传递参数,比如编码标准和检查目录
- 如果
phpcs检查失败(返回非零状态码),提交将被中断
如果你使用其他工具,例如 PHPStan,也可以加入:
{
"action": "vendor/bin/phpstan",
"options": ["analyse", "src"]
}
确保钩子在安装时自动设置
CaptainHook 会在运行 composer install 或 composer update 时自动安装 Git 钩子脚本。这是通过 Composer 的插件机制完成的。只要项目中包含 captainhook.json,新成员克隆项目后只需执行:
composer install
Git 的 pre-commit 钩子就会自动生效。
跳过钩子(临时)
在特殊情况下,你可以临时跳过钩子检查:
git commit --no-verify -m "跳过钩子提交"
但建议仅在紧急时使用,避免绕过质量保障流程。
基本上就这些。通过 CaptainHook 和 Composer 的结合,团队可以统一代码检查流程,减少人为疏忽,提升协作效率。配置一次,全员受益。










