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.json
VCS 저장소를 통해 동일한 패키지를 설치 하는 샘플 입니다.
{
"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/bar
require 섹션에서 와 같이 포크를 참조하려는 경우 composer.json
새 저장소 내부의 파일 에서 패키지 이름을 변경해야합니다 .
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
방금 분기 한 경우 가장 쉬운 방법은 github에서 바로 편집하는 것입니다.
답변
제 경우에는 Symfony2.3.x를 사용하고 최소 안정성 매개 변수는 기본적으로 “stable”(좋습니다)입니다. packagist에없는 저장소를 가져오고 싶었지만 “설치 가능한 패키지 집합으로 요구 사항을 해결할 수 없습니다.”라는 동일한 문제가 발생했습니다. 내가 가져 오려고 시도한 저장소의 composer.json이 최소 안정성 “dev”를 사용하는 것으로 나타났습니다.
따라서이 문제를 해결하려면 minimum-stability
. 이 게시물에 명시된 dev-master
대신 버전 을 요구하여 해결했습니다 .master
답변
composer.json
GitHub에서 를 사용하려면 이 예제 (VCS 섹션 아래)를 참조하십시오.
패키지 섹션은 composer.json
. 그러나 그 예를 따르지 않았거나 효과가 있었을 것입니다. 패키지 저장소에 대한 내용을 읽으십시오.
기본적으로 composer 저장소의에 포함 된 동일한 정보를 정의
packages.json
하지만 단일 패키지에 대해서만 정의합니다. 다시 말하지만, 최소 필수 필드는 이름, 버전 및 dist 또는 source 중 하나입니다.