web-dev-qa-db-ja.com

PHP composerを使用してgit repoを複製します

composer を使用して、 packagist にないgithubからgitリポジトリを自動的に複製しようとしていますが、動作していません。何をしているのかわかりません違う。

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

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

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

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

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

95
martin

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"
}
97
Mike Graf

実際、そのパッケージは 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です。

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完全に無視します。また、ほとんどの場合、適切な更新を許可しないなど、追加の制限があります。

パッケージリポジトリを避けます( ドキュメントも参照 )。

131
igorw

次のように、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"
}
41
Edris

可能であればソースを使用するようにcomposerに伝えるだけです:

composer update --prefer-source

または:

composer install --prefer-source

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

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

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

4
Josef Kufner

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

3
Henry

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

したがって、この問題を解決するには、minimum-stabilityを確認することを忘れないでください。この post で述べられているように、masterの代わりにdev-masterバージョンを要求することで解決しました。

2
Magus

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

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

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

1
Clarence