信息发布→ 登录 注册 退出

如何在 Composer 脚本中获取当前的分支名或 Git commit 信息?

发布时间:2025-12-13

点击量:
Composer脚本中需用shell_exec调用git命令获取分支名、commit信息等,如git rev-parse --abbrev-ref HEAD,并写入VERSION.json;须确保环境有Git且在仓库根目录,加容错处理。

如何在 composer 脚本中获取当前的分支名或 git commit 信息?

在 Composer 脚本中直接获取 Git 分支名或 commit 信息,不能靠 Composer 自身提供,得借助系统命令(如 git)在脚本执行时动态读取。关键在于确保运行环境有 Git 可用,且项目是 Git 仓库。

使用 exec 在脚本中调用 Git 命令

Composer 的 scripts 支持 shell 命令,可用 exec()shell_exec() 执行 Git 命令并捕获输出。推荐在自定义 PHP 脚本中操作,更可控:

  • 获取当前分支名git rev-parse --abbrev-ref HEAD
  • 获取完整 commit hashgit rev-parse HEAD
  • 获取短 commit hashgit rev-parse --short HEAD
  • 检查是否干净工作区git status --porcelain(输出为空表示干净)

在 composer.json 中定义脚本并调用 PHP 处理器

先在 composer.json 里注册一个脚本,指向你的 PHP 文件:

"scripts": {
  "post-install-cmd": [
    "MyBuildScript::injectGitInfo"
  ]
}

然后创建 MyBuildScript.php(确保自动加载或 require 进来),内容类似:

星声AI 星声AI

可分享的AI播客内容生成器和效率工具

星声AI 185 查看详情 星声AI
class MyBuildScript
{
    public static function injectGitInfo($event)
    {
        $branch = trim(@shell_exec('git rev-parse --abbrev-ref HEAD 2>/dev/null'));
        $commit = trim(@shell_exec('git rev-parse --short HEAD 2>/dev/null'));
        $dirty = !empty(trim(@shell_exec('git status --porcelain 2>/dev/null')));

        $info = [
            'branch' => $branch ?: 'unknown',
            'commit' => $commit ?: 'unknown',
            'dirty'  => $dirty,
        ];

        file_put_contents('VERSION.json', json_encode($info, JSON_PRETTY_PRINT));
    }
}

注意权限与环境限制

某些部署环境(如 CI/CD 的精简镜像、Docker 容器)可能没装 Git,或工作目录不是 Git 仓库根目录:

  • 2>/dev/null 避免错误输出干扰
  • @shell_exec 抑制警告(但建议先判断 git --version 是否可用)
  • 确保脚本在项目根目录运行(Composer 默认满足,但自定义命令需留意 getcwd()
  • 若用于生产构建,建议把 Git 信息写入文件或常量,避免运行时依赖

替代方案:构建前生成静态元数据

更健壮的做法是在 CI 流程中提前生成版本信息(如用 git describe),再注入到 Composer 构建上下文:

  • CI 脚本中运行:echo "APP_VERSION=$(git describe --tags --always --dirty)" >> .env
  • PHP 中用 $_ENVgetenv() 读取,不依赖运行时 Git
  • 或生成 build-info.php,被项目直接 require

基本上就这些。核心是别指望 Composer 内置 Git 支持,老老实实用 shell 命令,加好容错就行。

以上就是如何在 Composer 脚本中获取当前的分支名或 Git commit 信息?的详细内容,更多请关注php中文网其它相关文章!


相关文章: 单射、满射与双射的关系 一文理清所有逻辑  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法  Lar*el Excel导入时生成自定义递增ID的策略与实践  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  Lar*el Form Request 中唯一性验证更新操作的正确实践  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  微信网页版登录教程_微信网页版登录入口在哪  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  126邮箱账号注册 电脑版登录入口  解决移动端滚动问题的overflow属性应用指南  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  C#中解析不规范的HTML为XML 常见的坑与解决办法  使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战  抖音极速版最新版本 抖音极速版官方下载地址  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  c++如何使用chrono库处理时间_c++标准库时间与日期操作  J*a中实现Go语言select通道多路复用机制  Animex动漫社网入口地址 Animex动漫社网正版在线入口  PHP教程:将数据库查询结果动态展示到HTML Textarea的最佳实践  PHP表单隐藏域数据传递:常见问题与最佳实践  Python实现多节点属性重叠度分析教程  Win10双系统截图高效法 截屏快捷键速记【技巧】  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  DLsite中文平台入口 DLsite官网内容在线查看  小米14应用无法联网原因分析_小米14网络权限修复  yy漫画网页版官方入口_yy漫画官网登录页面链接  AngularJS $http POST请求数据传递与Go后端接收实践  使用Python高效删除Word宏并转换DOCM为DOCX格式  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  深入理解J*aScript Promise异步执行与微任务队列  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  自定义 WooCommerce 购物车:始终显示全部交叉销售商品  蛙漫安全无毒 官方认证的绿色入口  在python-socketio事件处理器中安全访问Flask应用上下文  Python异步编程实践:使用Binance API构建实时交易数据流  Linux如何排查内存不足OOME问题_LinuxOOM分析教程  iCloud登录入口网页版 苹果iCloud官网登录  Pyrogram与g4f集成:异步编程实践与常见错误解决  CSS子选择器:如何区分并样式化嵌套列表的子层级  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  J*aScript DOM操作:高效清空列表元素的策略与实践 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!