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


108

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


3
커밋을 요구할 때 composer는 요구 사항 (cmoposer.json)을 커밋하지 않습니다. 대신 시간이 지남에 따라 변경되는 분기 헤드 요구 사항을 계산합니다. 따라서 이것은 잠시 동안 작동 할 수 있지만 향후에는 확실히 중단 될 것입니다.
estani

답변:


157

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의 저장소를 포함해야한다고 제안 하지만이 경우에는 필요하지 않은 것처럼 들립니다. 이유를 모르겠습니다.


나는 이미 이것을 시도했지만 작동하지 않습니다. 특히 GitHub보다 Packagist를 선호하는 Composer와 관련이 있다고 생각합니까?
Maciej Sz

아니요, 로컬 리포지토리를 확인했습니다. GitHub 관련 문제가 아닙니다.
Maciej Sz

이전에이 작업을 수행했다고 확신합니다. 요구 사항 을 추가 "minimum-stability": "dev"하면 bar/bar-app어떻게됩니까?
Chris

3
그것은 당신이해야 할거야과 같은 명시 적으로 라이브러리 및 응용 프로그램 모두에서 그 해시에 Gaufrette을 필요로한다. "종속성 중 하나에 불안정한 패키지에 대한 종속성이있는 경우 충분한 안정성 플래그와 함께이를 명시 적으로 요구해야합니다." 예를 들어 Gaufrette와 같은 일부 패키지는 dev안정성에 있을 수 있으며 다른 모든 패키지에는 기본값이 stable있습니다.
Chris

2
GitHub가 즉시 Composer에서 지원되는 것 같습니다. 방금 "url": "https://github.com/KnpLabs/Gaufrette.git"첫 번째 패키지에서 제거 했지만 여전히 작동합니다.
Maciej Sz

15

다음은 명령 줄에서 수행하는 방법입니다.

composer update knplabs/gaufrette:dev-master#2633721 --with-dependencies

전체 해시를 사용할 필요는 없으며 7 자 길이의 해시가 트릭을 수행하는 것 같습니다. 위에서 언급했듯이 프로젝트는 dev를 지원해야합니다. 아직 설정하지 않은 경우 불만을 표시합니다. 또한 --with-dependencies업데이트하는 항목의 종속성을 가져 오는 데 사용하십시오.


0

포크로 Git 리포지토리를 변경하는 경우 패키지 이름이 실제로 패키지의 자체 composer.json 파일에 정의되어 있는지 확인하십시오. 패키지를 내 joshuapaling github 계정으로 포크 했음에도 불구하고 패키지는 이제 작곡가의 관점에서 패키지 이름에 전혀 영향을주지 않은 URL https://github.com/joshuapaling/Cake-Resque.git 에 있습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.