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

在 Composer 脚本中直接获取 Git 分支名或 commit 信息,不能靠 Composer 自身提供,得借助系统命令(如 git)在脚本执行时动态读取。关键在于确保运行环境有 Git 可用,且项目是 Git 仓库。
exec 在脚本中调用 Git 命令Composer 的 scripts 支持 shell 命令,可用 exec() 或 shell_exec() 执行 Git 命令并捕获输出。推荐在自定义 PHP 脚本中操作,更可控:

git rev-parse --abbrev-ref HEAD
git rev-parse HEAD
git rev-parse --short HEAD
git status --porcelain(输出为空表示干净)先在 composer.json 里注册一个脚本,指向你的 PHP 文件:
"scripts": {
"post-install-cmd": [
"MyBuildScript::injectGitInfo"
]
}
然后创建 MyBuildScript.php(确保自动加载或 require 进来),内容类似:
星声AI
可分享的AI播客内容生成器和效率工具
185
查看详情
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 是否可用)getcwd())更健壮的做法是在 CI 流程中提前生成版本信息(如用 git describe),再注入到 Composer 构建上下文:
echo "APP_VERSION=$(git describe --tags --always --dirty)" >> .env
$_ENV 或 getenv() 读取,不依赖运行时 Gitbuild-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操作:高效清空列表元素的策略与实践