composer を使用して、 packagist にないgithubからgitリポジトリを自動的に複製しようとしていますが、動作していません。何をしているのかわかりません違う。
次のように「リポジトリ」に含める必要があると思います。
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
そして、おそらくそれを「必須」セクションにリストします。 この例 に似ているはずですが、動作しません。このエラーが発生するだけです:
要件をインストール可能なパッケージのセットに解決できませんでした。
誰かがすでにこのようなことをしようとしたことがありますか?
2013年の執筆時点では、これがその1つの方法でした。 Composerは、より良い方法のサポートを追加しました。@ igorwの answer を参照してください
リポジトリはありますか?
Git、Mercurial、SVNはComposerでサポートされています。
リポジトリへのアクセスを書き込みますか?
はい?
リポジトリにcomposer.json
ファイルがあります
リポジトリがある場合は、次のように書き込むことができます。composer.json
ファイルを追加するか、既存のファイルを修正します。以下のソリューションを使用しないでください。
@igorwの answer に移動します
リポジトリがない場合にのみ使用してください
またはリポジトリにcomposer.json
がなく、追加できない場合
これにより、Composerが元のリポジトリのcomposer.json
から読み取ることができるすべてのもの(パッケージの依存関係やオートロードを含む)がオーバーライドされます。
package
タイプを使用すると、すべてを正しく定義するという負担があなたに移ります。より簡単な方法は、リポジトリにcomposer.json
ファイルを用意して、それを使用することです。
このソリューションは、変更できないZipのダウンロードをダウンロードしたり、読み取りのみが可能なリポジトリを所有しているが、もはやメンテナンスされていないまれなケースにのみ適しています。
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
実際、そのパッケージは packagistから入手可能 です。この場合、カスタムリポジトリ定義は必要ありません。必ず、バージョン制約に一致するrequire
(常に必要)を追加してください。
一般に、パッケージがpackagistで利用可能な場合、VCSリポジトリを追加しません。速度が低下するだけです。
Packagistを介して利用できないパッケージの場合、質問に示されているように、 VCS (またはgit)リポジトリを使用します。その際、次のことを確認してください。
require
がありますrequire
の制約は、VCSリポジトリによって提供されるバージョンと一致します。 composer show <packagename>
を使用して、使用可能なバージョンを見つけることができます。この場合、~2.3
が適切なオプションです。require
の名前は、リモートのcomposer.json
の名前と一致します。この場合、gedmo/doctrine-extensions
です。VCSリポジトリを介して同じパッケージをインストールするサンプルcomposer.json
は次のとおりです。
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
VCSリポジトリドキュメント は、これらすべてを非常によく説明しています。
composer.json
が使用可能なgit(またはその他のVCS)リポジトリがある場合、doは「パッケージ」リポジトリを使用しません。パッケージリポジトリでは、定義内のメタデータのallを提供する必要があり、提供されたdistおよびソースに存在するcomposer.json
を完全に無視します。また、ほとんどの場合、適切な更新を許可しないなど、追加の制限があります。
パッケージリポジトリを避けます( ドキュメントも参照 )。
次のように、gitリポジトリをcomposer.jsonに含めることができます。
"repositories": [
{
"type": "package",
"package": {
"name": "example-package-name", //give package name to anything, must be unique
"version": "1.0",
"source": {
"url": "https://github.com/example-package-name.git", //git url
"type": "git",
"reference": "master" //git branch-name
}
}
}],
"require" : {
"example-package-name": "1.0"
}
可能であればソースを使用するようにcomposerに伝えるだけです:
composer update --prefer-source
または:
composer install --prefer-source
次に、抽出されたtarballではなく、クローンされたリポジトリとしてパッケージを取得します。そのため、いくつかの変更を加えてコミットし直すことができます。もちろん、リポジトリへの書き込み/プッシュ許可があり、Composerがプロジェクトのリポジトリを知っていると仮定します。
免責事項:少し違う質問に答えたかもしれませんが、この質問を見つけたときに探していたので、他の人にも役立つことを願っています。
Composerがわからない場合、プロジェクトのリポジトリの場所、またはプロジェクトに適切なcomposer.jsonがない場合、状況はもう少し複雑ですが、他の人はすでにそのようなシナリオに答えています。
次のエラーが発生しました:The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
独自の変更を行うために別のリポジトリをフォークしている場合は、新しいリポジトリが作成されます。
例えば:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
新しいURLは、composer.jsonのリポジトリセクションに移動する必要があります。
Requireセクションでフォークをmy-foo/bar
として参照する場合は、新しいリポジトリ内のcomposer.json
ファイルでパッケージの名前を変更する必要があります。
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
分岐したばかりの場合、これを行う最も簡単な方法は、github内で編集することです。
私の場合、Symfony2.3.xを使用し、最小安定性パラメーターはデフォルトで「安定」です(これは良いことです)。 packagistではなくレポをインポートしたいのですが、「インストール可能なパッケージのセットに要件を解決できませんでした」という同じ問題がありました。私がインポートしようとしたレポジトリのcomposer.jsonは、最小安定度の「dev」を使用しているようです。
したがって、この問題を解決するには、minimum-stability
を確認することを忘れないでください。この post で述べられているように、master
の代わりにdev-master
バージョンを要求することで解決しました。
GitHubのcomposer.json
を使用する場合は、 この例 (VCSセクションの下)を参照してください。
パッケージセクションは、composer.json
を持たないパッケージ用です。ただし、その例にも従わなかったか、うまくいきました。パッケージリポジトリについての説明を読んでください。
基本的に、composerリポジトリの
packages.json
に含まれるのと同じ情報を定義しますが、単一のパッケージについてのみです。繰り返しますが、最低限必要なフィールドは、名前、バージョン、およびdistまたはsourceのいずれかです。