如何设置Git钩子(hooks)在提交前自动运行composer脚本(如lint, test)?

发布时间 - 2025-11-19 00:00:00    点击率:
可通过 Git pre-commit 钩子在提交前自动运行 Composer 脚本。2. 在 .git/hooks/ 目录创建可执行的 pre-commit 文件,调用 composer run lint 和 test 进行代码检查与测试。3. 确保 composer.json 定义了相关脚本命令。4. 钩子不会自动共享,建议将脚本放入项目并软链接安装。5. 可优化为仅对修改的文件运行检查。6. 紧急时可用 git commit --no-verify 跳过验证。设置后每次提交都将自动确保代码质量。

在提交代码前自动运行 Composer 脚本(如代码检查、单元测试),可以通过 Git 的 pre-commit 钩子实现。这个钩子会在每次执行 git commit 时触发,适合用来运行 lint 或 test 命令,确保提交的代码符合质量标准。

1. 创建 pre-commit 钩子脚本

进入你的项目根目录下的 .git/hooks/ 目录:

cd .git/hooks

创建或编辑 pre-commit 文件:

touch pre-commit chmod +x pre-commit

用编辑器打开 pre-commit,写入以下内容:

#!/bin/sh

运行 composer lint(假设你在 composer.json 中定义了 lint 脚本)

composer run lint --no-interaction

检查上一条命令是否成功

if [ $? -ne 0 ]; then echo "❌ Lint 失败,提交被阻止" exit 1 fi

运行 composer test

composer run test --no-interaction

if [ $? -ne 0 ]; then echo "❌ 测试失败,提交被阻止" exit 1 fi

echo "✅ 代码检查和测试通过,允许提交" exit 0

2. 在 composer.json 中定义脚本

确保你的 composer.json 中定义了 linttest 命令,例如:

"scripts": { "lint": "php-cs-fixer fix --dry-run --config=.php-cs-fixer.php", "test": "phpunit --stop-on-failure" }

这样 composer run lintcomposer run test 就能正确执行。

3. 注意事项与优化建议

  • Git 钩子不会随项目自动共享,团队成员需手动设置或通过脚本安装。
  • 可将钩子脚本放在项目根目录(如 scripts/pre-commit),然后在初始化项目时软链接到 .git/hooks/
ln -sf ../../scripts/pre-commit .git/hooks/pre-commit
  • 考虑只对相关文件运行检查(如仅 PHP 文件被修改时才 lint),提升效率。
  • 若想跳过钩子(紧急情况),使用 git commit --no-verify(但应谨慎使用)。

基本上就这些。设置完成后,每次提交都会自动检查代码质量和测试通过情况,帮助维护项目稳定性。


# php  # js  # git  # json  # composer  # ai  # echo  # if  # 跳过  # 自动运行  # 放在  # 就能  # 你在  # 会在  # 可以通过  # 都将  # 可将  # 可通过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何在腾讯云服务器快速搭建个人网站?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  移动端脚本框架Hammer.js  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何实现本地化和多语言支持?(i18n教程)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  黑客如何利用漏洞与弱口令入侵网站服务器?  公司门户网站制作流程,华为官网怎么做?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  javascript中闭包概念与用法深入理解  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  北京网站制作的公司有哪些,北京白云观官方网站?  如何基于PHP生成高效IDC网络公司建站源码?  如何自定义建站之星网站的导航菜单样式?  JS弹性运动实现方法分析  JS经典正则表达式笔试题汇总  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  高端企业智能建站程序:SEO优化与响应式模板定制开发  北京网站制作公司哪家好一点,北京租房网站有哪些?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何快速选择适合个人网站的云服务器配置?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  微信推文制作网站有哪些,怎么做微信推文,急?  如何在腾讯云服务器上快速搭建个人网站?  简单实现Android验证码  Laravel如何记录自定义日志?(Log频道配置)  如何在Windows服务器上快速搭建网站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  简单实现Android文件上传  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  微信小程序 canvas开发实例及注意事项  如何在VPS电脑上快速搭建网站?  Firefox Developer Edition开发者版本入口  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  微信小程序 闭包写法详细介绍  网站建设保证美观性,需要考虑的几点问题!  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  JavaScript数据类型有哪些_如何准确判断一个变量的类型