129

私はcomposerを使用して、 packagistにないgithubからgitリポジトリを自動的に複製しようとしていますが、機能しておらず、何が間違っているのか理解できません。

私はそれを次のように「リポジトリ」に含める必要があると思います。

"repositories": [
    {
        "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
        "type": "git"
    }
],

そして、おそらくそれを「必須」セクションにリストします。この例に似ているはずですが、機能しません。このエラーが発生するだけです。

要件をインストール可能なパッケージのセットに解決できませんでした。

誰かがすでにこのようなことをしようとしたことがありますか?

4

8 に答える 8

156

そのパッケージは、実際にはpackagistから入手できます。この場合、カスタムリポジトリ定義は必要ありません。requireバージョン制約が一致する(常に必要な)を必ず追加してください。

一般に、パッケージがpackagistで利用可能な場合は、VCSリポジトリを追加しないでください。それは物事を遅くするだけです。


packagistで利用できないパッケージの場合は、質問に示されているように、VCS(またはgit)リポジトリを使用します。その際、次のことを確認してください。

  • 「リポジトリ」フィールドはルートcomposer.jsonで指定されます(これはルートのみのフィールドであり、必要なパッケージからのリポジトリ定義は無視されます)
  • リポジトリ定義は、有効なVCSリポジトリを指します
  • タイプが「vcs」ではなく「git」である場合(あなたの質問のように)、それが実際にgitリポジトリであることを確認してください
  • require問題のパッケージのがあります
  • の制約はrequire、VCSリポジトリによって提供されるバージョンと一致します。使用composer show <packagename>可能なバージョンを見つけるために使用できます。この場合~2.3、良いオプションになります。
  • の名前requireは、リモートの名前と一致しcomposer.jsonます。この場合はですgedmo/doctrine-extensions

composer.json以下は、VCSリポジトリを介して同じパッケージをインストールするサンプルです。

{
    "repositories": [
        {
            "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
            "type": "git"
        }
    ],
    "require": {
        "gedmo/doctrine-extensions": "~2.3"
    }
}

VCSリポジトリのドキュメントは、これらすべてを非常によく説明しています。


composer.json利用可能なgit(または他のVCS)リポジトリがある場合は、「パッケージ」リポジトリを使用しないでください。パッケージリポジトリでは、定義内のすべてのメタデータを提供する必要があり、提供されたdistおよびsourceに存在するものはすべて完全に無視されます。composer.jsonまた、ほとんどの場合、適切な更新ができないなど、追加の制限があります。

パッケージリポジトリは避けてください(ドキュメントも参照してください)。

于 2012-10-18T15:13:48.197 に答える
127

2013年の執筆時点では、これはそのための1つの方法でした。Composerは、より良い方法のサポートを追加しました。@igorwの回答を参照してください。

リポジトリはありますか?

Git、Mercurial、SVNはComposerでサポートされています。

リポジトリへの書き込みアクセス権はありますか?

はい?

リポジトリにはcomposer.jsonファイルがありますか

書き込み可能なリポジトリがある場合:composer.jsonファイルを追加するか、既存のリポジトリを修正し、以下のソリューションを使用しないでください。

@igorwの回答に移動します

これは、リポジトリがない場合、またはリポジトリにリポジトリがなく、追加できない場合にのみ使用してください。
composer.json

composer.jsonこれにより、パッケージの依存関係や自動読み込みなど、Composerが元のリポジトリから読み取ることができる可能性のあるすべてのものが上書きされます。

タイプを使用すると、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"
}
于 2013-01-23T17:28:07.340 に答える
52

次のように、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"
}
于 2014-12-11T13:14:32.890 に答える
6

可能な場合はソースを使用するように作曲家に指示するだけです。

composer update --prefer-source

または:

composer install --prefer-source

次に、抽出されたtarballではなく、複製されたリポジトリとしてパッケージを取得するため、いくつかの変更を加えてコミットし直すことができます。もちろん、リポジトリへの書き込み/プッシュ権限があり、Composerがプロジェクトのリポジトリについて知っていると仮定します。

免責事項:少し違う質問に答えられるかもしれませんが、これは私がこの質問を見つけたときに探していたものだったので、他の人にも役立つことを願っています。

Composerがプロジェクトのリポジトリがどこにあるかを知らない場合、またはプロジェクトに適切なcomposer.jsonがない場合、状況はもう少し複雑になりますが、他の人はすでにそのようなシナリオに答えています。

于 2016-07-12T21:19:47.363 に答える
3

次のエラーが発生しました。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内で編集することです。

于 2015-06-27T23:19:51.660 に答える
3

リストする必要のある重要なポイントがいくつかあるので、ここで言及されているソリューションに参加しようとしています。

  1. @igorwの回答で述べたように、リポジトリへのURLは、その場合、composer.jsonファイルで指定する必要があります。ただし、どちらの場合も、composer.jsonが存在する必要があるため(2番目の方法の@Mike Grafとは異なり)、Packagistで公開します。それほど違いはありません(さらに、Githubは現在npmパッケージとしてパッケージサービスを提供しています)。サインアップ後にpackagistインターフェイスで文字通りURLを入力するのではなく、違いだけです。

  2. さらに、再帰的なリポジトリ定義がComposerで機能しないため、このアプローチを使用する外部ライブラリに依存できないという欠点があります。さらに、そのため、依存関係で再帰的定義が失敗したため、「バグ」があるようです。ルートでリポジトリを明示的に再指定するだけでは不十分であるように見えますが、パッケージからのすべての依存関係も再指定されます。

作曲家ファイル付き(2012年10月18日15:13 igorwに回答

{
    "repositories": [
        {
            "url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
            "type": "git"
        }
    ],
    "require": {
        "gedmo/doctrine-extensions": "~2.3"
    }
}

作曲家ファイルなし(2013年1月23日17:28マイクグラフに回答)

"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"
}
于 2020-07-15T15:29:30.947 に答える
2

私の場合、Symfony2.3.​​xを使用しており、最小安定性パラメーターはデフォルトで「安定」です(これは良いことです)。packagistにないリポジトリをインポートしたかったのですが、同じ問題が発生しました。「インストール可能なパッケージのセットに要件を解決できませんでした。」インポートしようとしたリポジトリのcomposer.jsonは、最小安定性の「dev」を使用しているようです。

したがって、この問題を解決するには、を確認することを忘れないでくださいminimum-stability。この投稿dev-masterに記載されているのではなく、バージョンを要求することで解決しました。master

于 2013-11-13T13:41:58.307 に答える
1

composer.jsonGitHubのを使用する場合は、この例(VCSセクションの下)を参照してください。

パッケージセクションは、を持たないパッケージ用ですcomposer.json。しかし、あなたはその例にも従わなかったか、それもうまくいったでしょう。パッケージリポジトリについての説明を読んでください。

基本的に、composerリポジトリに含まれているのと同じ情報を定義しますがpackages.json、単一のパッケージに対してのみ定義します。繰り返しになりますが、最低限必要なフィールドは、名前、バージョン、およびdistまたはsourceのいずれかです。

于 2012-10-18T12:51:39.503 に答える