如何查看Composer包的更新记录和changelog?
- 内容介绍
- 文章标签
- 相关推荐
本文共计983个文字,预计阅读时间需要4分钟。
Composer 没有内置命令能直接查看包的更新记录(changelog)。所有可用的命令如 `composer log` 和 `composer show --changelog` 都不存在。强行运行这些命令只会报错:
composer show -s 是唯一能帮你跳转的起点
它不显示日志,但能给你最可靠的源码地址,这是后续所有操作的前提:
-
composer show vendor/package -s输出中的source.url字段,是当前安装时实际拉取的 Git 仓库地址(比composer.json里的support.source更真实) - 如果输出里没有
source段,说明这个包是以 dist zip 方式安装的,vendor/下没有 Git 历史,git log就不可用 - 若
source.url是https://github.com/vendor/name.git,去掉末尾.git,直接拼/releases—— 例如https://github.com/guzzlehttp/guzzle/releases,90% 的变更摘要都在这里 - 别信
homepage字段:有些包填的是官网文档页(如 Laravel),有些填的是旧域名甚至 404 链接,优先以source.url为准
GitHub Releases 页面比 CHANGELOG.md 更可靠
很多包的 CHANGELOG.md 更新滞后、格式混乱,或只覆盖主版本;而 GitHub Releases 是每个 tag 的正式发布快照,含 diff 链接、作者说明、升级提示:
- 点进
/releases后,找对应版本号的 tag(如v7.5.0),不是main或dev分支 - 如果目标版本没出现在列表里(比如只看到
v7.4.2→v7.5.1),说明中间那个小版本可能没打 tag,得用git diff查 - 部分包(如 Symfony)把 changelog 按分支维护:
https://github.com/symfony/console/blob/6.4/CHANGELOG.md,注意路径中分支名要和你要查的版本匹配 - 用 GitHub 搜索框输
filename:CHANGELOG.md或path:/^changelog/i,比手动翻目录快得多
想看两个版本之间具体改了啥?得靠 git diff,但有条件
这一步只有在满足以下全部条件时才可行:
- 该包是以 source 方式安装的(
composer show vendor/package中type是library且source字段非空) - 你清楚知道两个版本号(比如从
composer outdated输出里抄来的v2.8.0→v2.9.0) - 执行:
git -C vendor/vendor/package diff --stat v2.8.0..v2.9.0,加--name-only可只看改动文件列表 - 如果失败,报 “fatal: ambiguous argument”,说明本地 Git 仓库没 fetch 这两个 tag,先
git -C vendor/vendor/package fetch --tags
私有包、插件、没写 changelog 的包怎么办
这类情况没有银弹,只能降级处理:
- 私有包:直接
cat vendor/vendor/package/CHANGELOG.md(如果存在),否则git -C vendor/vendor/package log --oneline -n 20看最近提交,重点扫chore(release)、docs(changelog)类 commit - Composer 插件:先
composer show --plugins确认类名,再grep -r "class YourPluginClass" vendor/定位到文件,然后进对应目录查 Git 历史 - 完全没维护 changelog 的包:别猜,直接看
composer.lock里该包的source.reference(commit hash),用它去仓库页面搜commit/xxx,读提交信息 + 修改的文件 - 最易被忽略的一点:有些包把破坏性变更写在
UPGRADE.md或UPGRADING.md里,升级前务必ls vendor/vendor/package/ | grep -i upgrade
本文共计983个文字,预计阅读时间需要4分钟。
Composer 没有内置命令能直接查看包的更新记录(changelog)。所有可用的命令如 `composer log` 和 `composer show --changelog` 都不存在。强行运行这些命令只会报错:
composer show -s 是唯一能帮你跳转的起点
它不显示日志,但能给你最可靠的源码地址,这是后续所有操作的前提:
-
composer show vendor/package -s输出中的source.url字段,是当前安装时实际拉取的 Git 仓库地址(比composer.json里的support.source更真实) - 如果输出里没有
source段,说明这个包是以 dist zip 方式安装的,vendor/下没有 Git 历史,git log就不可用 - 若
source.url是https://github.com/vendor/name.git,去掉末尾.git,直接拼/releases—— 例如https://github.com/guzzlehttp/guzzle/releases,90% 的变更摘要都在这里 - 别信
homepage字段:有些包填的是官网文档页(如 Laravel),有些填的是旧域名甚至 404 链接,优先以source.url为准
GitHub Releases 页面比 CHANGELOG.md 更可靠
很多包的 CHANGELOG.md 更新滞后、格式混乱,或只覆盖主版本;而 GitHub Releases 是每个 tag 的正式发布快照,含 diff 链接、作者说明、升级提示:
- 点进
/releases后,找对应版本号的 tag(如v7.5.0),不是main或dev分支 - 如果目标版本没出现在列表里(比如只看到
v7.4.2→v7.5.1),说明中间那个小版本可能没打 tag,得用git diff查 - 部分包(如 Symfony)把 changelog 按分支维护:
https://github.com/symfony/console/blob/6.4/CHANGELOG.md,注意路径中分支名要和你要查的版本匹配 - 用 GitHub 搜索框输
filename:CHANGELOG.md或path:/^changelog/i,比手动翻目录快得多
想看两个版本之间具体改了啥?得靠 git diff,但有条件
这一步只有在满足以下全部条件时才可行:
- 该包是以 source 方式安装的(
composer show vendor/package中type是library且source字段非空) - 你清楚知道两个版本号(比如从
composer outdated输出里抄来的v2.8.0→v2.9.0) - 执行:
git -C vendor/vendor/package diff --stat v2.8.0..v2.9.0,加--name-only可只看改动文件列表 - 如果失败,报 “fatal: ambiguous argument”,说明本地 Git 仓库没 fetch 这两个 tag,先
git -C vendor/vendor/package fetch --tags
私有包、插件、没写 changelog 的包怎么办
这类情况没有银弹,只能降级处理:
- 私有包:直接
cat vendor/vendor/package/CHANGELOG.md(如果存在),否则git -C vendor/vendor/package log --oneline -n 20看最近提交,重点扫chore(release)、docs(changelog)类 commit - Composer 插件:先
composer show --plugins确认类名,再grep -r "class YourPluginClass" vendor/定位到文件,然后进对应目录查 Git 历史 - 完全没维护 changelog 的包:别猜,直接看
composer.lock里该包的source.reference(commit hash),用它去仓库页面搜commit/xxx,读提交信息 + 修改的文件 - 最易被忽略的一点:有些包把破坏性变更写在
UPGRADE.md或UPGRADING.md里,升级前务必ls vendor/vendor/package/ | grep -i upgrade

