如何避免Composer丢弃更改的提示消息

33

我正在通过composer更新symfony的vendors。我总是使用以下命令:

php composer.phar update

但是在最近版本的Composer中,在更新每个包之前都会显示以下消息:

  - Updating doctrine/data-fixtures dev-master (a95d783 => a28b6bd)
The package has modified files:
M .gitignore
M .gitmodules
M LICENSE
M README.md
M UPGRADE
M composer.json
M lib/Doctrine/Common/DataFixtures/AbstractFixture.php
M lib/Doctrine/Common/DataFixtures/DependentFixtureInterface.php
M lib/Doctrine/Common/DataFixtures/Event/Listener/MongoDBReferenceListener.php
M lib/Doctrine/Common/DataFixtures/Event/Listener/ORMReferenceListener.php

-10个文件已被修改,请选择“v”查看完整列表 放弃更改[y,n,v,s,?]?

如何避免这种情况?

4个回答

43

34

@lemats和@reza-sanaie的回答都不完整,因为需要--no-interaction(-n)composer选项才能真正更新而没有任何问题(请参见https://github.com/composer/composer/pull/1188#issuecomment-16011533)。

所以在

php composer.phar config --global discard-changes true

或在修改 composer.json 文件之后

"config": {
    "discard-changes": true
},  

使用

php composer.phar update -n

22

除了 @lemats 的解决方案之外,您可以通过修改 composer.json 文件来实现:

  "config": {
      "discard-changes": true
  },  

值得注意的是,要使这个选项生效,你必须以--no-interaction模式运行。

php composer.json install --no-interaction

尽管我同意@Seldaek的观点,即你不应该修改这些供应商文件,但有时你被迫进行猴子补丁:(


3
如果这是一个重要的修复,你可以随时向供应商的代码库提交pull request。 - Gabriel Alack

-4

1
有时候仍然会发生这种情况。我见过一些服务器上的人使用crontab进行chmod,从而影响所有供应商的权限。或者在调试供应商库时,也可能会发生这种情况。 - Ascherer
2
这也可能是由于git文件模式造成的,特别是当vendor文件是你在bin中建立了符号链接的情况下。 - gidmanma
1
在进行错误测试时,有时您需要在供应商文件中使用var dump来查看到底发生了什么......而且您可能并不总是将更改恢复为“完全”相同的状态......可能会添加空格等。 - HappyCoder
一些项目(例如Drupal 9.x)修改结帐文件和供应商文件,有时是无法避免的。 - FGM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接