【问题标题】:Composer won't update due to changes on the current branch由于当前分支的更改,Composer 不会更新
【发布时间】:2018-05-05 02:15:54
【问题描述】:

我们有 composer 作为我们的依赖注入框架,它将引入我们创建的库 foobar,它工作正常。库 foobar 有 14 个版本 v1.1.1 -> v1.1.14。一直到 .12 作曲家更新了应用程序。但是现在我们得到了这个错误:

Update failed (Source directory /home/username/dev/git/appname/vendor/foorbar/library has unpushed changes on the current branch: 
Branch v1.1.14 could not be found on the origin remote and appears to be unpushed)

composer.json:

{
  "name": "App",
  "description": "Foo Bar",
  "require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.2.",
    "foobarzf2lib/library": "v1.1."
  },
  "minimum-stability": "stable",
  "repositories": [
    {
      "type": "package",
      "package": {
        "name": "foobarzf2lib/library",
        "version": "v1.1.14",
        "source": {
          "url": "https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/foobarzf2lib",
          "type": "git",
          "reference": "test"
        },
        "autoload": {
          "psr-4": {
            "FooBar\\" : "FooBar/"
          }
        }
      }
    }
  ]
}

更多信息:

  • 供应商在 git 中被忽略。
  • 试过$ composer.phar clearcache
  • 最好不必每次都删除库。

【问题讨论】:

标签: php git composer-php


【解决方案1】:

删除供应商文件夹并重新安装软件包。

【讨论】:

    【解决方案2】:

    Branch v1.1.14 could not be found on the origin remote and appears to be unpushed) 这意味着无论您从哪里提取包都没有 v1.1.14。 确保将 v1.1.14 推送到包提供商,一切都应该没问题。

    【讨论】:

      【解决方案3】:

      Composer 将本地存储库(vendor 文件夹中的那个)视为前导。每当作曲家认为它不再连接(或分歧)以进行结帐时,它就会拒绝更新(我认为这是好的和理智的)。

      这可能看起来很麻烦,但这也许是为了易于使用而付出的代价。 Composer 实际上是在处理更新的同时管理该 git checkout(它配置了各种遥控器,然后是缓存,所有这些都无需额外设置)。

      在我的情况下,我可以看到类似的错误(不是所询问的确切错误消息,当遥控器确实更改为非快进时,我收到通知一个或一些文件已更改而没有任何直接更改)并且我解决了它以下方式(也许它在缺少分支的情况下也有效?不过,使用类似于以下的 git 命令查看问题可能会获得更好的见解):

      git -C <path> pull && composer update
      

      然后可以工作,其中&lt;path&gt; 是作曲家错误消息中给出的目录路径。如果没有,来自 git 的更具体的错误消息希望能说明更多。

      以防万一,您需要在 composer 继续之前解决版本冲突。当您在 git 中发生合并冲突时,情况类似,如果不解决它就无法进行下一次提交,否则您的存储库中的文件会带有合并冲突标记(并且不会编译)。

      如果有兴趣,我的 git 配置的一个方面是pull.rebase=merges。这原则上是在 pull 上做一个 rebase(IIRC 可能会保留一些合并)。

      作为替代方法 - 类似于删除 整个 供应商文件夹 - 只删除报告的路径应该可以。因为这是 git,所以 那个 存储库已经消失了,而正如作曲家所关心的那样,它不再是:

      rm -rf -- <path> && composer update
      

      &lt;path&gt; 是(必须是)作曲家错误消息中的路径。小心rm -rf,它很容易超出范围 - 仅供参考。

      (这是similar to the reported resolution in composers issue tracker

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2011-06-12
        • 1970-01-01
        • 2021-09-20
        • 2011-04-23
        相关资源
        最近更新 更多