composer不提供更新详情,需用composer show -s获取真实仓库地址并拼接releases或changelog链接;composer outdated仅静态比对版本号,无法反映实际变更、bc break或安全修复细节。

Composer 本身不提供包更新内容的说明,composer outdated 只告诉你“升到哪个版本”,不告诉你“改了什么”——必须手动查源码仓库的 Releases 或 CHANGELOG。
怎么拿到包的真实仓库地址和日志入口
唯一可信路径是 composer show -s vendor/package,它输出的 source.url 是安装时实际拉取的 Git 地址,比 homepage 或 support.source 更准。
- 如果返回
https://github.com/monolog/monolog.git,去掉末尾.git,拼成https://github.com/monolog/monolog/releases - 若该 URL 返回 404,改试
https://github.com/monolog/monolog/blob/main/CHANGELOG.md(注意大小写,也可能是/blob/master/changelog.md或/blob/6.x/CHANGELOG.md) -
source.url为空?说明是 dist 安装(vendor/下无.git),只能退而求其次查composer show vendor/package输出里的homepage字段 - 私有包或非 GitHub 托管的,得人工转换协议:比如
git@gitlab.example.com:group/pkg.git→https://gitlab.example.com/group/pkg/-/releases
为什么不能信 composer outdated 的输出
composer outdated 只静态比对 composer.lock 和 Packagist 最新稳定版,不联网查 GitHub,也不解析任何日志文件。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 它不会告诉你
v3.5.0是否修复了log() throws on null context这类关键 bug - 不标注 BC break,比如
LoggerInterface::log()签名是否变更 -
--security-only只标“有漏洞”,不标“怎么修”;--direct只过滤 root 包,不增加日志信息 - 输出的版本号可能和 Git tag 不完全同步(如预发布版
v3.0.0-rc1通常不被 Packagist 索引)
怎么对比两个版本之间具体改了啥
这一步只在满足全部条件时才可行:source.url 非空(即以 source 方式安装)、你知道精确的旧/新版本号(如从 composer outdated 抄来的 v3.4.0 → v3.5.0)。
- 进包目录执行:
git -C vendor/vendor/package diff --stat v3.4.0..v3.5.0 - 加
--name-only只看改动文件列表;加-- CHANGELOG.md专注日志变更 - 若报
fatal: ambiguous argument,先运行git -C vendor/vendor/package fetch --tags - 没装 source?临时克隆:
git clone https://github.com/vendor/package.git /tmp/pkg && cd /tmp/pkg && git diff --stat v3.4.0..v3.5.0
比对 composer.lock 才是看清“到底更新了哪些包”的底线操作
想确认 composer update 实际改了什么,别依赖 composer show 或树状输出——它们不反映 lock 文件真实变更。
- 更新前备份:
cp composer.lock composer.lock.bak;更新后再跑diff -u composer.lock.bak composer.lock - 聚焦
"name"、"version"、"source"、"dist"行,忽略"time"、"type"等噪声字段 - 避免用
composer show --locked --format=json直接 diff:虽然可用jq -S标准化,但原始composer.lock本身就是规范 JSON,且 Composer 2.x 起字段顺序固定,更可靠 -
composer status显示 modified?那不是版本变了,是代码被你或别人动过了——它不提供 diff 内容,只是哈希校验失败提示
最常被忽略的一点:GitHub Releases 页面比 CHANGELOG.md 更值得优先点开。很多包的 CHANGELOG.md 更新滞后、格式混乱,或只覆盖主版本;而 Releases 是每个 tag 的正式发布快照,含作者手写的升级提示、破坏性变更标注、diff 链接——别点 “Code” 标签翻目录,直接点右上角 Releases 标签页。










