COMPOSER_DISCARD_CHANGES 控制 Composer 处理 vendor 目录本地修改的行为:1. none 时报错中断;2. stash 时暂存更改后恢复;3. 1 或 true 时强制丢弃,适用于 CI/CD 环境确保部署一致性。

Composer 的 COMPOSER_DISCARD_CHANGES 环境变量用于控制 Composer 在执行更新或安装操作时,如何处理 vendor/ 目录中已安装包的本地修改。
当你运行 composer install 或 composer update 时,如果某个已安装的依赖包在 vendor/ 目录中存在本地更改(例如手动修改了其中的 PHP 文件),Composer 默认会提示错误并中断操作,以防止意外覆盖这些更改。
通过设置 COMPOSER_DISCARD_CHANGES,你可以告诉 Composer 自动处理这些更改,而无需人工干预。该环境变量支持以下三个值:
1. none(默认行为)
遇到任何本地修改时,Composer 将停止执行并报错,要求你手动处理冲突。2. stash
Composer 会尝试将vendor 中的本地修改“暂存”起来(类似 Git 的 stash 操作),然后继续执行操作。完成后,如果有适用的恢复机制,会尝试重新应用这些更改。适合在 CI/CD 环境中临时保留修改。3. 1 或 true
强制丢弃所有本地修改,不保存也不提示。Composer 会直接重置到包的原始状态,相当于执行了git checkout .。适用于自动化部署场景,确保环境干净一致。举例设置方式:
OpenClaw 技能 — 给定一个 GitHub 仓库 URL,自动解析出 owner/repo 名称,发现其中的 YAML/properties 配置文件及其配对的中文字段说明;在 `workspace/{repo}/` 目录下按同步日期(格式为 `YYYY-MM-DD`)创建时间戳子目录;写入 `.openclaw-config-state.json` 状态文件。每次用户提问前,先比对远程仓库当前 ref(如 `main` 或 `master`)的最新提交 SHA 与本地状态文件中记录的 SHA:
COMPOSER_DISCARD_CHANGES=1 composer install # 或 export COMPOSER_DISCARD_CHANGES=stash composer update
这个变量在持续集成(CI)流程中特别有用,可以避免因开发误提交的本地修改导致构建失败。
基本上就这些——它帮你控制 Composer 遇到 vendor 修改时是“停下来问你”,还是“自动清理继续”。










