composer status 经常无输出,是因为它只检测以 source 方式安装(含 .git 目录)的包,而默认 prefer-dist: true 导致绝大多数包通过 zip 安装、无 Git 仓库,故不被检查;私有包若未正确配置 source 或 "type": "package",即使本地有 Git 仓库也无效。

composer status 为什么经常没输出?
空输出不等于 vendor 干净,只代表「所有以 source 方式安装的包都没被改」。默认 prefer-dist 为 true,绝大多数包走 zip 下载,vendor/xxx 下没有 .git 目录,composer status 根本不检查它们——删了文件、改了代码,它都沉默。
判断一个包是否会被检测,运行:composer show package/name,如果输出里没有 source 字段,说明它当前是 dist 模式,status 对它无效。
- 私有包漏配
"type": "package"或没声明"source",即使你本地有 Git 仓库也白搭 - 某些包虽然用了 source,但你执行过
git checkout .或git clean -fd,工作区变干净了,status也会跳过 -
untracked状态表示该包不在composer.lock里,却出现在vendor/中,常见于手动git clone或删了composer.json行但没清 vendor
怎么让 composer status 真正起作用?
核心是让目标包变成 source 模式,否则 status 就是睁眼瞎。有三种方式:
- 重装单个包:
composer update --prefer-source vendor/package - 全局强制 source:
composer install --prefer-source或composer update --prefer-source - 永久配置(推荐):
composer config prefer-source true,会写入项目composer.json的config块
注意:source 模式要求包本身提供 source 地址(如 Git URL),且你的系统 PATH 中必须有 git 命令,否则即使开了 prefer-source 也 fallback 到 dist。
看到 modified 后,怎么快速定位改了啥?
composer status -v 只列文件路径,不显示差异内容。真要看改了哪几行,必须进到对应包的 Git 仓库里操作:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先用
composer status -v确认包名和路径,比如输出monolog/monolog modified (src/Logger.php) - 然后
cd vendor/monolog/monolog - 运行
git diff HEAD --stat看改动概览,或git diff看完整差异
一行自动查所有 modified 包的改动(Linux/macOS):composer status | grep "modified" | cut -d' ' -f1 | xargs -I{} sh -c 'echo "\n=== {} ==="; cd vendor/{} && git diff HEAD --stat 2>/dev/null'
注意:composer status 输出格式不稳定(加 -v 后字段顺序可能变),别用它写自动化脚本做逻辑判断,只适合人眼扫。
CI/部署前靠 status 验一致性够吗?
不够。它只反映 Git 工作区状态,不是文件哈希或 lock 快照校验。真正难的不是运行命令,而是理解它背后依赖的是 Git 仓库的当前状态——而这个状态本身可能已被污染(比如本地分支、未跟踪文件、脏暂存区)。
更可靠的 CI 前检查是:composer install --no-dev --dry-run + 校验 composer.lock 是否被篡改(比如用 git status --porcelain composer.lock)
如果发现修改,恢复手段有限:
– 单个包:进 vendor/foo/bar 执行 git restore .(仅 source 模式有效)
– 彻底重装:rm -rf vendor && composer install,这是最稳妥的兜底方式

















