依存パッケージで利用できるように、Composerで特定のコミットを正しく要求する方法は?


108

GitHubからの特定のコミットが含まれるライブラリがfoo/foo-libありrequiresます。

{
    "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
コミットが必要な場合、composerはそのコミット要件を守らないことに注意してください(cmoposer.json)。代わりに、時間とともに変化するブランチヘッドの要件を計算します。したがって、これはしばらくはうまくいくかもしれませんが、将来的には確実に壊れるでしょう。
estani 2014年

回答:


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"
    }
}

ドキュメントから:

依存関係の1つが不安定なパッケージへの依存関係を持っている場合は、十分な安定性フラグとともに、明示的にそれを要求する必要があります。

このドキュメントでは、Gaufretteのリポジトリをbar/bar-appComposerファイルに含める必要があることも示唆していますが、この場合、これは必要なかったようです。理由はわかりません。


私はすでにこれを試しましたが、どちらも機能しません。特にGitHubよりもPackagistを優先するComposerと関係があると思いますか?
Maciej Sz 14年

いいえ、ローカルリポジトリで確認しました。これはGitHub固有の問題ではありません。
Maciej Sz 14年

これが以前に機能することを私は確信しています。要件に追加"minimum-stability": "dev"するとどうなりbar/bar-appますか?
Chris

3
それはあなたがする必要があるとしているように見えます明示的にあなたのライブラリー、およびアプリケーションの両方でそのハッシュでGaufretteが必要です。「依存関係の1つが不安定なパッケージへの依存関係を持っている場合は、十分な安定性フラグとともに、明示的にそれを要求する必要があります。」Gaufretteなどのいくつかのパッケージはdev安定していて、stableそれ以外はすべてデフォルトに設定できることに注意してください。
Chris

2
GitHubはそのままComposerでサポートされているよう"url": "https://github.com/KnpLabs/Gaufrette.git"です。最初のパッケージからを削除したところ、まだ機能しています。
Maciej Sz 14年

15

コマンドラインでの実行方法は次のとおりです。

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

ハッシュ全体を使用する必要はありません。7文字のハッシュでうまくいくようです。上で述べたように、あなたのプロジェクトはdevをサポートする必要があります-まだ設定されていないと不満を言うでしょう。また、を使用--with-dependenciesして、更新する依存関係を取得します。


0

フォークによってGitリポジトリーに変更を加える場合は、パッケージ名が実際にパッケージの独自のcomposer.jsonファイルで定義されていることを確認してください。現在、パッケージはURL https://github.com/joshuapaling/Cake-Resque.gitに存在し、作曲家の観点からはパッケージの名前にまったく影響を与えていませんでした。

愚かなエラー-しかし、私はcomposerに慣れていないので、最初ははっきりしませんでした!だから、これが同じ問題を持つ他の誰かを助けることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.