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

冰火之心
发布: 2025-12-13 17:33:20
原创
664人浏览过
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 进来),内容类似:

Mistral AI
Mistral AI

Mistral AI被称为“欧洲版的OpenAI”,也是目前欧洲最强的 LLM 大模型平台

Mistral AI 182
查看详情 Mistral 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 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号