背景
需要在测试环境维护一个稳定版本的全量项目包。写了一个脚部定时拉取最新的 master
分支代码,并自动更新对应的子模块。由于前期的 .gitignore
文件规范没处理好,因此导致了 composer
自动更新 vendor
的问题一直卡住,导致了 vendor
一直处于原始版本。
由于长期没有更新 vendor
目录,导致通过 composer update
的时候,不断有项目仓库跳出下述交互信息 The package has modified files
,这对于通过脚部自动更新是极为不便的。
- Updating erc_code/erc-core (v2.0.2 => 3.2.2):
The package has modified files:
M .gitignore
M README.md
M composer.json
M src/Controller/MgController.php
M src/Core/App.php
M src/Core/DbModel.php
M src/Core/HttpController.php
M src/Core/Input.php
M src/Core/Router.php
M src/Exceptions/BadMethodCallException.php
12 more files modified, choose "v" to view the full list
Discard changes [y,n,v,d,s,?]
解决方案
出现上述情况的原因:由于本地的vendor
目录中存在了被修改或冲突的提交,导致了composer
更新包时出现冲突错误。
最初composer
遇到该情况是直接提示更新失败,后续composer
作者Seldaek
更新了这一特性,使得开发者可以自行选择处理方式。
设置composer
变更配置
composer config --global discard-changes true
直接忽略本地的变更,覆盖安装更新composer config --global discard-changes stash
将本地变更暂存stash
到本地然后再更新
屏蔽composer update
交互信息
composer update
的时候添加 -n
参数,可以屏蔽弹出的交互信息