[php] PHP composer를 사용하여 git repo 복제

composer 를 사용 하여 packagist에 없는 github에서 git 저장소를 자동으로 복제 하려고 하지만 작동하지 않으며 내가 뭘 잘못하고 있는지 알아낼 수 없습니다.

다음과 같이 “저장소”에 포함시켜야한다고 생각합니다.

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

그런 다음 “require”섹션에 나열합니다. 이 예제 와 비슷해야 하지만 작동하지 않습니다. 이 오류가 발생합니다.

설치 가능한 패키지 세트로 요구 사항을 해결할 수 없습니다.

이미 이와 같은 일을 시도한 사람이 있습니까?



답변

2013 년 글을 쓰는 시점에서 이것은 그렇게하는 한 가지 방법이었습니다. Composer는 더 나은 방법에 대한 지원을 추가했습니다. @igorw의 답변보기

저장소가 있습니까?

Git, Mercurial 및 SVN은 Composer에서 지원됩니다.

저장소에 대한 쓰기 액세스 권한이 있습니까?

예?

저장소에 composer.json파일이 있습니까?

리포지토리가있는 경우 쓸 수있는 composer.json파일 : 파일을 추가 하거나 기존 파일을 수정하고 아래 솔루션을 사용하지 마십시오.

@igorw의 답변으로 이동

리포지토리가없는 경우
또는 리포지토리에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"
}


답변

사실 그 패키지는 packagist를 통해 구할 수 있습니다 . 이 경우 사용자 지정 저장소 정의가 필요하지 않습니다. require일치하는 버전 제약 조건으로 (항상 필요함) 을 추가했는지 확인하십시오 .

일반적으로 packagist에서 패키지를 사용할 수 있는 경우 VCS 저장소를 추가 하지 마십시오 . 그것은 단지 일을 느리게 할 것입니다.


packagist를 통해 사용할 수없는 패키지 의 경우 질문에 표시된대로 VCS (또는 git) 저장소를 사용하십시오. 그럴 때 다음 사항을 확인하십시오.

  • “repositories”필드는 루트 composer.json에 지정됩니다 (루트 전용 필드이며 필수 패키지의 저장소 정의는 무시 됨).
  • 저장소 정의는 유효한 VCS 저장소를 가리 킵니다.
  • 유형이 “vcs”대신 “git”인 경우 (질문에서와 같이) 실제로 git repo인지 확인하십시오.
  • 당신은이 require질문에 패키지
  • 의 제약 조건 require은 VCS 저장소에서 제공하는 버전과 일치합니다. 사용 composer show <packagename>가능한 버전을 찾는 데 사용할 수 있습니다. 이 경우 ~2.3좋은 선택이 될 것입니다.
  • 의 이름 require이 리모컨의 이름과 일치합니다 composer.json. 이 경우 gedmo/doctrine-extensions.

다음은 composer.jsonVCS 저장소를 통해 동일한 패키지를 설치 하는 샘플 입니다.

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

VCS REPO 문서는 이 모든 것을 아주 잘 설명합니다.


기호가있는 자식 (또는 다른 VCS) 저장소가있는 경우 composer.json사용할 수를 하지 않습니다 는 “패키지”의 repo를 사용합니다. 패키지 저장소 는 정의에있는 모든 메타 데이터 를 제공해야 하며 제공된 dist 및 소스에있는 모든 항목 을 완전히 무시 합니다 composer.json. 또한 대부분의 경우 적절한 업데이트를 허용하지 않는 것과 같은 추가 제한 사항이 있습니다.

패키지 repos를 피하십시오 ( 문서 참조 ).


답변

다음과 같이 composer.json에 git 저장소를 포함 할 수 있습니다.

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


답변

가능한 경우 작곡가에게 소스를 사용하도록 지시하십시오.

composer update --prefer-source

또는:

composer install --prefer-source

그런 다음 압축을 푼 tarball 대신 복제 된 저장소로 패키지를 가져 오므로 일부 변경하고 다시 커밋 할 수 있습니다. 물론 저장소에 대한 쓰기 / 푸시 권한이 있고 Composer가 프로젝트의 저장소에 대해 알고 있다고 가정합니다.

면책 조항 : 조금 다른 질문에 대답 할 수있을 것 같지만이 질문을 발견했을 때 찾던 것이 었으므로 다른 사람들에게도 도움이되기를 바랍니다.

Composer가 프로젝트의 저장소가 어디에 있는지 모르거나 프로젝트에 적절한 composer.json이없는 경우 상황은 좀 더 복잡하지만 다른 사람들은 이미 그러한 시나리오에 응답했습니다.


답변

다음 오류가 발생했습니다. 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의 저장소 섹션으로 이동해야합니다.

my-foo/barrequire 섹션에서 와 같이 포크를 참조하려는 경우 composer.json새 저장소 내부의 파일 에서 패키지 이름을 변경해야합니다 .

{
    "name":         "foo/bar",

=>

{
    "name":         "my-foo/bar",

방금 분기 한 경우 가장 쉬운 방법은 github에서 바로 편집하는 것입니다.


답변

제 경우에는 Symfony2.3.x를 사용하고 최소 안정성 매개 변수는 기본적으로 “stable”(좋습니다)입니다. packagist에없는 저장소를 가져오고 싶었지만 “설치 가능한 패키지 집합으로 요구 사항을 해결할 수 없습니다.”라는 동일한 문제가 발생했습니다. 내가 가져 오려고 시도한 저장소의 composer.json이 최소 안정성 “dev”를 사용하는 것으로 나타났습니다.

따라서이 문제를 해결하려면 minimum-stability. 이 게시물에 명시된 dev-master대신 버전 을 요구하여 해결했습니다 .master


답변

composer.jsonGitHub에서 를 사용하려면 이 예제 (VCS 섹션 아래)를 참조하십시오.

패키지 섹션은 composer.json. 그러나 그 예를 따르지 않았거나 효과가 있었을 것입니다. 패키지 저장소에 대한 내용을 읽으십시오.

기본적으로 composer 저장소의에 포함 된 동일한 정보를 정의 packages.json하지만 단일 패키지에 대해서만 정의합니다. 다시 말하지만, 최소 필수 필드는 이름, 버전 및 dist 또는 source 중 하나입니다.