使用composer install --prefer-source命令时出现错误。

9

当我运行 composer install --prefer-source 或尝试更新这个特定的束 (其它正常工作的束) 时,我会收到以下错误:

Failed to download some-bundle from source: Failed to execute git checkout 'xx' -- && git reset --hard 'xx' --

error: The following untracked working tree files would be overwritten by checkout:
...
    [ list of all files in repo on a branch that interests me ]
...
Please move or remove them before you can switch branches.
Aborting

我猜测我在捆绑存储库上搞错了什么,但不知道具体是什么。

  1. 我克隆了全新的项目存储库
  2. 我尝试使用"composer install --prefer source",但仍然出现错误。

有趣的是 - 这个错误只在MAC上的docker中发生。在其他安装了linux的电脑上,它可以正常工作。


使用哪个版本的Composer?有人报告了相同的问题,更新Composer可以解决它们。值得一试吗?“对于其他遇到此问题的人,请尝试composer update --prefer-dist”。其他建议是在GIT Bash中运行而不是CMD(Windows)。 - Robbie
Composer版本1.2.1于2016年9月12日11:27:19发布。--prefer-dist不按我想要的方式工作 - 我无法直接从供应商发送更改。但我认为这只是在MAC上的问题。 - mmmm
解决方案是永远不要在供应商文件夹内进行修改。这直接违反了Composer、供应商文件夹和一般正确的开发实践的全部意义。 - Sammitch
1
@Sammitch,事实并非如此。例如,如果您想使用应用程序上下文开发包,直接在供应商目录中获取主干/分支并进行开发是有效的选项。因此,Composer会在安装/更新之前警告您所做的更改。 - NiMeDia
1个回答

8
看起来您在此bundle的vendor目录中手动更新了源代码。如果是这样,请尝试在更新软件包之前直接提交/推送或重置它们。
如果不是这样,可能与这个问题有关:https://github.com/composer/composer/issues/2896 作者写道:
"这可以通过以下两种方式解决:
当执行存储时,添加--include-untracked标志,这将一并存储新增加的文件。
当检出时,添加--force标志,这将覆盖文件而不是中止操作。"
如果无法解决问题,可以手动删除供应商目录以强制Composer重新安装软件包。
请注意https://getcomposer.org/doc/03-cli.md#clear-cache, 也许Composer缓存了Git存储库,因此无法更新。

我已经编辑了我的问题。即使我从头开始,错误仍然存在。 - mmmm
@mmmm 或许 Composer 内部缓存了一些东西,我已经编辑了我的回答。 - NiMeDia
我已经尝试清除缓存,但即使我从克隆新的存储库并在Docker上安装供应商开始,我仍然会收到错误提示。 - mmmm
@mmmm 在这种情况下,如果不知道环境的情况下,我认为我无法再帮助你了。我可以建议你在详细模式下执行composer命令 --verbose (-v) 并将结果放在你的问题中,并提供尽可能多的信息。看起来像是git存储库中出现了问题,或者是composer中的一般性错误。 - NiMeDia
我认为这与MAC上的Docker有关,因为如我所说,在其他带有Linux的PC上一切正常。--verbose没有提供更多信息。 - mmmm
1
也许 Docker 使用了全局 Composer 缓存或供应商目录,因此它无法修改文件,因为另一个 Docker 实例中有更改,但这只是一个猜测。 - NiMeDia

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