如何正确要求Composer中的特定提交,以便可用于依赖包?


108

我有一个库foo/foo-librequires来自GitHub的特定提交:

{
    "name": "foo/foo-lib",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/KnpLabs/Gaufrette.git"
        }
    ],
    "require": {
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

它工作正常:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)                                 
  - Updating knplabs/gaufrette dev-master (2633721 => 2633721)
    Checking out 2633721877cae79ad461f3ca06f3f77fb4fce02e

Generating autoload files

但是当我在其他项目中需要该库时:

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master"
    }
}

它产生依赖错误:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for foo/foo-lib dev-master -> satisfiable by foo/foo-lib[dev-master].
    - foo/foo-lib dev-master requires knplabs/gaufrette dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e -> no matching package found.

所以我的问题是:如何正确地require从库中的GitHub提交特定的提交,以便它可以在依赖包中使用?


3
请注意,当需要提交时,作曲家将不遵守提交要求(cmoposer.json)。取而代之的是,它计算分支头要求,该要求会随着时间而变化。因此,这可能会工作一段时间,但将来肯定会中断。
estani 2014年

Answers:


157

您必须dev在库和应用程序中的该哈希中显式地要求Gaufrette库,并带有一个标志。这样的事情应该在应用程序中起作用composer.json

{
    "name": "bar/bar-app",
    "repositories": [
        {
            "type": "vcs",
            "url": "ssh://git.example.com/foo-lib"
        }
    ],
    "require-dev": {
        "foo/foo-lib": "dev-master",
        "knplabs/gaufrette": "dev-master#2633721877cae79ad461f3ca06f3f77fb4fce02e"
    }
}

文档中

如果您的依赖项之一依赖于不稳定的程序包,则还需要明确要求它以及其足够的稳定性标志。

该文档还建议您需要在bar/bar-appComposer文件中包含Gaufrette的存储库,尽管在这种情况下听起来好像没有必要。我不知道为什么。


我已经尝试过了,也不起作用。我认为这可能与Composer特别喜欢Packagist而不是GitHub有关吗?
Maciej Sz 2014年

不,我已经检查了本地存储库-这不是GitHub的特定问题。
Maciej Sz 2014年

我相当确定我之前曾做过这项工作。如果您增加"minimum-stability": "dev"bar/bar-app要求怎么办?
克里斯

3
看起来像你将不得不明确要求Gaufrette在这两个库中,并且您的应用程序的哈希。“如果您的一个依赖项依赖于一个不稳定的软件包,那么您还需要明确要求它以及其足够的稳定性标志。” 请注意,您可以拥有一些dev稳定的软件包,例如Gaufrette,而stable对于其他所有软件包,则默认为。
克里斯

2
似乎GitHub已由Composer开箱即用-我刚刚"url": "https://github.com/KnpLabs/Gaufrette.git"从第一个软件包中删除了GitHub ,它仍然有效。
Maciej Sz 2014年

15

您可以在命令行中执行以下操作:

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

您不必使用整个哈希,一个七个字符长的哈希似乎可以解决问题。如上所述,您的项目将需要支持dev-如果尚未设置,它将抱怨。同样,用于--with-dependencies获取要更新的依赖关系。


0

如果您通过派生对Git存储库进行更改,请确保使用。包名实际上是在包自己的composer.json文件中定义的-即使我将包分叉到了自己的joshuapaling github帐户中,并且该软件包现在位于URL https://github.com/joshuapaling/Cake-Resque.git,从作曲家的角度来看,这根本没有影响该软件包的名称。

一个愚蠢的错误-但是我是作曲家的新手,一开始还不清楚!因此,我希望这可以帮助遇到相同问题的其他人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.