【问题标题】:How Composer handles local changesComposer 如何处理本地更改
【发布时间】:2015-06-14 12:23:40
【问题描述】:

假设我通过 Composer 安装 package for CKEditor 并手动安装 add new skins and plugins to it。 Composer 将如何处理这个问题,何时发布基础包的下一次更新?

它会覆盖整个包目录(删除本地更改)还是只更新列出的文件?

另外,I'm having problems updating one package to newest version 并在本地手动进行了更新。然而,composer status 显示 No local changes。这是否意味着 Composer 本身不会检查每个包文件夹的内容是否有本地更改,只对 composer.jsoncomposer.lock 之间的差异进行操作?

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    Composer 将更新到与您在 composer.json 中添加的版本相匹配的最新版本,是的 - 它会覆盖现有包(包括您的所有更改),但它会忽略包中不存在的文件。

    命令:“composer status”显示文件中属于指定包的所有更改。如果您要更改某个文件,那么它将显示在该列表中,但如果您要添加一个新文件,那么当然不会。

    通常,您的方法在某些情况下可能有效,但我强烈不推荐。问题将是当您创建一些文件,然后将其添加到包中(例如在较新版本中)。

    您应该直接在您的应用程序中“按原样”使用所有包,并在其中添加新内容或其他配置等。

    【讨论】:

    • 您的回答与下面Yo-han 的回答相反。您声称,我介绍的新文件在原始包中不存在,在更新时将保持不变。虽然 Yo-han 声称,整个包文件夹将被删除(包括我所有的本地添加)。
    • 做了一个快速测试来刷新我的记忆,这就是我发现的。当您使用“dev-master”版本标签更新打包时,不会触及包中不存在的文件。如果您使用明确的版本号,旧包将被删除,新包将在之后安装。
    【解决方案2】:

    它会覆盖整个包目录(删除本地更改)还是只更新列出的文件?

    是的。更新包时,Composer 会删除包的当前版本并安装新版本。

    另外,我在将一个软件包更新到最新版本并在本地手动进行更新时遇到问题。然而,作曲家状态显示没有本地更改。这是否意味着 Composer 本身不会检查每个包文件夹的内容是否有本地更改,只对 composer.json 和 composer.lock 之间的差异进行操作?

    composer.json 中的 1.* 部分告诉 Composer 仅在 1.* 版本范围内有可用的新版本时更新。新提交不是新版本。当包所有者创建具有更高版本号的新版本时,将提供新的更新。如果您想在每次新提交后更新,您应该将“1.*”更改为“dev-master”。

    【讨论】:

    • 感谢您的回答。我自己刚刚弄清楚了这一点。然而,令我惊讶的是,我发现使用dev-master 会导致 Composer 在该包的文件夹中创建功能齐全的 Git 资源。你知道这背后的原因是什么吗?
    • 我的猜测是在更新覆盖之前更容易提交和推送包的更改。不过只是猜测。
    猜你喜欢
    • 2022-09-30
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多