ライブラリfoo/foo-lib
があり、これはrequires
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.
だから私の質問は:依存パッケージで利用できるように、私のライブラリのGitHubからの特定のコミットを正しくrequire
する方法ですか?
ライブラリとアプリケーションの両方で、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つが不安定なパッケージに依存している場合は、十分な安定性フラグとともに明示的に要求する必要があります。
このドキュメントでは、bar/bar-app
ComposerファイルにGaufretteのリポジトリを含める必要があることも示唆されていますが、この場合は必要ではないようです。理由はわかりません。
コマンドラインで行う方法は次のとおりです。
composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies
ハッシュ全体を使用する必要はありません。7文字の長さのハッシュでうまくいくようです。上記のように、プロジェクトはdevをサポートする必要があります-まだ設定されていないと文句を言うでしょう。また、--with-dependencies
を使用して、更新中の依存関係を取得します。
フォークしてGitリポジトリを変更する場合は、パッケージ名が実際にパッケージのcomposer.jsonファイルで定義されていることを確認してください-パッケージを自分のjoshuapaling githubアカウントにフォークしたとしても、パッケージは現在、URLに存在していました https://github.com/joshuapaling/Cake-Resque.git 。これは、作曲家の観点からはパッケージの名前にまったく影響していませんでした。
愚かなエラー-しかし、私は作曲家が初めてで、最初ははっきりしていませんでした!ですから、これが同じ問題を抱えている他の人の助けになることを願っています。