PHP Composer를 사용하여 git repo 복제

컴포저를 사용하여 git 저장소를 자동으로 복제하려고 합니다.git 저장소는 패키지리스트에 없습니다만, 동작하지 않고, 무엇을 잘못하고 있는지 알 수 없습니다.

다음과 같이 “리포지토리”에 포함시켜야 한다고 생각합니다.

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

아마 “disclosed” 섹션에 기재되어 있을 겁니다.이 예시와 비슷해야 하는데 작동하지 않습니다.다음 오류만 표시됩니다.

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

이미 이런 시도를 한 사람이 있나요?



질문에 대한 답변



패키지는 사실 포장 업자를 통해 구입할 수 있습니다.이 경우 사용자 지정 리포지토리 정의는 필요하지 않습니다.꼭 추가해 주세요.require(항상 필요한) 버전 제약이 일치합니다.

일반적으로 패키지에서 패키지를 사용할 수 있는 경우 VCS repo를 추가하지 마십시오.일이 더디게 진행될 거야


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

  • “리포지토리” 필드는 root composer.json에서 지정됩니다(루트 전용 필드이며 필수 패키지의 저장소 정의는 무시됩니다).
  • 저장소 정의가 유효한 VCS 보고서를 가리키고 있습니다.
  • 만약 타입이 “vcs”가 아닌 “git”인 경우 (당신의 질문에서처럼) 실제로 git repo인지 확인합니다.
  • 가지고 있다require문제의 소포에 대해서
  • 의 제약조건requireVCS repo에서 제공하는 버전과 일치합니다.사용할 수 있습니다.composer show <packagename>사용 가능한 버전을 검색합니다.이 경우~2.3좋은 선택일 거예요.
  • 의 이름require리모트의 이름과 일치합니다.composer.json이 경우는,gedmo/doctrine-extensions.

여기 샘플이 있습니다.composer.jsonVCS repo를 통해 동일한 패키지를 설치합니다.

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

VCS repo documents에서는 이 모든 것을 잘 설명합니다.


git(또는 다른 VCS) 저장소가 있는 경우composer.json사용할 수 있습니다. “사용 가능한” 보고서를 사용하지 마십시오.패키지 저장소에서는 정의의 모든 메타데이터를 제공해야 하며 모든 메타데이터는 완전히 무시됩니다.composer.json제공된 dist 및 source에 표시됩니다.또한 대부분의 경우 적절한 업데이트를 허용하지 않는 등 추가적인 제한이 있습니다.

패키지 저장소를 사용하지 마십시오(문서 참조).




2013년에 글을 쓸 때, 이것은 하나의 방법이었다.Composer는 더 나은 방법을 위한 지원을 추가했습니다.@igorw의 답변을 참조하십시오.

저장소가 있습니까?

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

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

네?

저장소에 A이(가) 있습니까?composer.json파일

저장소가 있는 경우 다음 위치에 쓸 수 있습니다.composer.json파일을 작성하거나 기존 파일을 수정하고 아래 솔루션을 사용하지 마십시오.

@igorw의 답변으로 이동합니다.

저장소가 없는 경우에만 사용
또는 저장소에 A가 없는 경우composer.json추가할 수 없습니다.

그러면 Composer가 원래 저장소의 데이터를 읽을 수 있는 모든 내용이 덮어쓰게 됩니다.composer.json패키지와 자동 로딩의 의존성을 포함합니다.

사용방법packagetype은 모든 것을 올바르게 정의해야 하는 부담을 사용자에게 전가합니다.좀 더 쉬운 방법은…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" } 



다음과 같이 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이 없는 경우 상황은 조금 복잡하지만 다른 사람들은 이미 이러한 시나리오에 답했습니다.




여기에 기재되어 있는 솔루션에는 몇 가지 중요한 포인트가 있기 때문에 여기에 기재되어 있는 솔루션에 참여하려고 합니다.

  1. @igorw의 답변에서 설명한 바와 같이 저장소에 대한 URL은 composer.json 파일에 지정되어 있어야 합니다.단, 두 경우 모두 composer.json이 존재해야 합니다(@Mike Graf의 두 번째 방법과는 달리). 또한 Github은 현재 npm 패키지로만 패키지를 제공하고 있습니다).ifreference는 등록 후 Packagist 인터페이스에서 URL을 문자 그대로 입력하는 대신 사용할 수 있습니다.

  2. 또한 Composer에서는 재귀 저장소 정의가 작동하지 않으므로 이 방법을 사용하는 외부 라이브러리에 의존할 수 없다는 단점이 있습니다.또한 이로 인해 재귀 정의가 의존관계에서 실패했기 때문에 루트에 명시적으로 저장소를 재지정하는 것만으로는 충분하지 않은 것 같지만 패키지의 모든 의존관계도 재지정해야 합니다.

작곡가 파일 포함 (2012년 10월 18일 15:13 igorw에 응답)

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

작곡가 파일 없음 (13년 1월 23일 17:28 Mike Graf에 응답)

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