[php] Composer에서 특정 커밋을 올바르게 요구하여 종속 패키지에서 사용할 수 있도록하는 방법은 무엇입니까?

GitHub의 특정 커밋 라이브러리 foo/foo-librequires있습니다.

{
    "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에서 특정 커밋 을 올바르게 지정하여 종속 패키지에서 사용할 수 있도록하는 방법입니다.



답변

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

에서 문서 :

종속성 중 하나에 불안정한 패키지에 대한 종속성이있는 경우 충분한 안정성 플래그와 함께이를 명시 적으로 요구해야합니다.

이 문서는 또한 bar/bar-appComposer 파일 에 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 에 있습니다.

어리석은 오류-하지만 저는 작곡가가 처음이고 처음에는 명확하지 않았습니다! 그래서 나는 이것이 같은 문제를 가진 다른 사람에게 도움이되기를 바랍니다.


답변