【问题标题】:composer update not pulling latest dev-master作曲家更新不拉最新的开发主
【发布时间】:2014-05-01 18:00:38
【问题描述】:

我创建了两个 git 存储库,我们需要使用 PHP 的 composer 将它们安装在我们的一个 Web 应用程序中。每个存储库都有两个分支,ma​​sterdev-master

在我想要安装包的项目中,我创建了以下 composer.json 包配置:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "proprietary",
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "impression-works/pdf-generator",
                "version": "dev-master",
                "source": {
                    "url": "git@github.com:...",
                    "type": "git",
                    "reference": "dev-master"
                }
            }
        },
        {
            "type": "package",
            "package": {
                "name": "impression-works/psd-templates",
                "version": "dev-master",
                "source": {
                    "url": "git@github.com:...",
                    "type": "git",
                    "reference": "dev-master"
                }
            }
        }
    ],
    "require": {
        // ...
        "impression-works/psd-templates": "dev-master",
        "impression-works/pdf-generator": "dev-master"
    },
    "autoload": {
        // ...
        "psr-0": {
            "ImpressionWorks\\PsdTemplates": "vendor/impression-works/psd-templates/src",
            "ImpressionWorks\\PdfGenerator": "vendor/impression-works/pdf-generator/src"
        }
    },
    // ...
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "stable"
}

当我最初运行 composer update 或 composer install 时,impress-works 软件包安装完美,但是,如果我对这些存储库进行更改并将它们推送到 dev-master,任何对 composer update 的连续调用都会简单地报告:

Nothing to install or update

我如何强制作曲家更新到我们这两个自定义包的最新提交?

【问题讨论】:

    标签: git composer-php


    【解决方案1】:

    试试这个

    composer clear-cache
    composer update
    

    【讨论】:

      【解决方案2】:

      我每周通过 Google 搜索多次访问此页面,但发现它没有回答我的问题。就这样吧。

      我使用的是 packagist.org,而不是 VCS。我不想使用 VCS,因为它会进一步降低 Composer 的速度,而且速度已经非常慢了。

      考虑以下场景。早期开发中的应用取决于我正在构建的包。这个包也是dev早期的,所以dev-master作为版本每次都能得到最新的master。

      我修复了包中的一个严重错误,提交并推送它,在 packagist.org 中混搭更新按钮,然后运行 ​​composer update,绝对没有任何反应。

      $ composer update
      Loading composer repositories with package information
      Updating dependencies (including require-dev)
      Nothing to install or update
      Writing lock file
      Generating autoload files
      

      此时您可以尝试清除缓存。没用。

      您会在某个时间点偶然发现this open issue from 2012。之后你会发现安装最新版本的唯一方法是在require中使用commit hash。


      composer require vendor/package dev-master#0d7d6c88

      这需要您手动获取提交哈希并将版本更新为composer.json,然后再次运行composer update。不完全是您对依赖项管理器的期望。看起来这个问题永远不会消失,所以除非有人写出更好的 Composer,否则我们会被这种行为所困扰。

      另一种方法是使用 Composer 标记您要下载的每个提交。小心 Composer 默认抛出的混淆最小稳定性规则和错误。

      【讨论】:

        【解决方案3】:

        @Bitclaw 的答案更简单的版本,对我来说,以下工作完美无缺:

        composer update --prefer-source developer/package
        

        【讨论】:

          【解决方案4】:

          运行 composer upgrade 有点危险,因为它可能会更新您拥有的所有其他依赖项。在这种情况下,我将运行以下命令:

          composer clearcache;composer update --lock;composer install --prefer-source -vvv
          

          【讨论】:

            【解决方案5】:

            我也遇到了同样的问题。搞清楚之后,解决方法也很简单:清理缓存。

            约瑟夫和克里斯蒂安正在寻找的东西可以通过这两行来实现:

            composer clearcache
            composer upgrade
            

            这会为我加载最后一个存储库主机。希望它可以帮助下一个,阅读这个帖子。

            重要提示:

            您必须等待 GitHub 服务挂钩启动并更新 packagist.org 上的作曲家包,或在网站上手动使用“更新”按钮。

            这不是几秒钟的问题...您必须等待一段时间(通常是一到五分钟)才能让 packagegist 有机会分发更改。

            所以为了持续快速的开发,我只需要手动cd vendor/base/packagegit update。并且不时尝试上述clearcacheupgrade

            【讨论】:

              【解决方案6】:

              您应该使用VCS 类型的自定义存储库。您使用的软件包 repo 有一些限制,如 highlighted in the docs:

              • 除非您更改版本字段,否则 Composer 不会更新包。
              • Composer 不会更新提交引用,因此如果您使用 master 作为引用,则必须删除包以强制更新,并且必须处理不稳定的锁定文件。

              【讨论】:

              • 我遇到了与 Asker 相同的症状,但就我而言,我根本没有为包定义存储库。需要明确的是,这个包是我自己的,我将它托管在一个私人 Git 服务器上。在需要软件包之前,我只是忽略了添加存储库(在我拥有的几十个其他存储库中)。是否有可能我在适当的位置创建了存储库(或手动将其克隆到那里),并且 Composer 为此“看到”它并回退到 package 存储库类型?无论如何,这正是我的解决方案:将包的 VCS 存储库添加到 composer.json!谢谢!
              猜你喜欢
              • 1970-01-01
              • 2015-12-01
              • 2015-09-11
              • 2014-09-07
              • 2016-09-06
              • 1970-01-01
              • 1970-01-01
              • 2018-09-02
              • 2021-12-16
              相关资源
              最近更新 更多