作曲家更新没有拉​​最新的开发大师

时间:2014-03-24 11:41:29

标签: git composer-php

我已经创建了两个git存储库,我们需要使用PHP的 composer 在我们的一个Web应用程序中安装这些存储库。每个存储库都有两个分支, dev-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时,印象工作包安装得很完美,但是,如果我对这些存储库进行更改并将它们推送到dev-master,那么对composer update的任何连续调用只会报告:

Nothing to install or update

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

6 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:11)

我每周多次从Google搜索来到此页面,但却发现它无法解决我的问题。所以这里。

我正在使用packagist.org,而不是VCS。我不想使用VCS,因为它会让Composer变得更慢,而且它已经很慢了。

Condider以下场景。在早期开发中的应用取决于我正在构建的包。该软件包也是dev的早期版本,所以dev-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会抛出错误。

答案 2 :(得分:3)

我刚遇到同样的问题。搞清楚之后,解决方案非常简单:清理缓存。

约瑟夫和克里斯蒂安正在寻找的是这两条线:

composer clearcache
composer upgrade

为我加载最后一个存储库主服务器。希望它有助于下一个,阅读这个主题。

重要提示:

您必须等待GitHub服务挂钩启动并更新packagist.org上的编写器包或使用'更新'在网站上手动按钮。

这不是几秒钟......你必须等待一段时间(通常是一到五分钟)才能给包装工作者分配更改的机会。

因此,对于持续快速的开发,我只需手动cd vendor/base/packagegit update。并不时尝试上述clearcacheupgrade

答案 3 :(得分:0)

@Bitclaw的答案更简单的版本,对我而言,以下内容可完美工作:

composer update --prefer-source developer/package

答案 4 :(得分:-1)

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

.hasClass

答案 5 :(得分:-1)

尝试一下

composer clear-cache composer update