programing

Composer에서 특정 커밋을 올바르게 요구하여 종속 패키지에서 사용할 수 있도록 하려면 어떻게 해야 합니까?

procenter 2022. 10. 20. 21:49
반응형

Composer에서 특정 커밋을 올바르게 요구하여 종속 패키지에서 사용할 수 있도록 하려면 어떻게 해야 합니까?

나는 도서관이 있다.foo/foo-lib어떤.requiresGitHub의 특정 커밋:

{
    "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에서 특정 커밋을 수행합니까?

당신은 그 해시에서 Gaufrette 라이브러리를 명시적으로 요구해야 합니다.dev라이브러리와 응용 프로그램 모두에서 플래그를 사용할 수 있습니다.어플리케이션에서는 이와 같은 것이 동작합니다.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"
    }
}

매뉴얼에서 다음 항목을 참조하십시오.

의존관계 중 하나가 불안정한 패키지에 의존하고 있는 경우 충분한 안정성 플래그와 함께 패키지도 명시적으로 요구해야 합니다.

또한 문서에서는 Gaufrette의 저장소를 다음 문서에 포함시켜야 한다고 제안합니다.bar/bar-app작곡가 파일입니다만, 이 경우에는 필요하지 않은 것 같습니다.왜 그랬는지 모르겠어.

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

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, 에 상주하고 있었습니다.작곡가의 관점에서 패키지의 이름을 수정했습니다.

바보 같은 오류 - 하지만 나는 작곡가가 처음이라 처음에는 분명하지 않았다!그래서 나는 이것이 같은 문제를 가지고 있는 다른 사람에게 도움이 되기를 바란다.

언급URL : https://stackoverflow.com/questions/21314381/how-to-correctly-require-a-specific-commit-in-composer-so-that-it-would-be-avail

반응형