Usar o compositor do PHP para clonar o git repo
estou a tentar usar o compositor para clonar automaticamente um repositório git do GitHub que não está no packagist mas não está a funcionar e não consigo descobrir o que estou a fazer de errado.
acho que tenho de incluí-lo entre "repositórios" como este:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
e depois provavelmente listá-lo na secção "require". Deve ser semelhante a Este exemplo mas não funciona. Ele apenas dá este erro:
Alguém já tentou fazer algo assim?as suas necessidades não puderam ser resolvidas um conjunto instalável de pacotes.
7 answers
TEM UM REPOSITÓRIO?
Git, Mercurial, SVN é suportado pelo compositor.
TEM ACESSO DE ESCRITA AO REPOSITÓRIO?
Sim?O REPOSITÓRIO TEM UM FICHEIRO composer.json
Se tiver um repositório onde possa escrever: adicione um ficheiro composer.json
, ou corrija o existente um, e não use a solução abaixo.
Vai a @igorw 's responde
SÓ USAR ISTO SE NÃO TIVER UM REPOSITÓRIO
OU SE O REPOSITÓRIO NÃO TEM UM composer.json
E VOCÊ NÃO PODE ADICIONÁ-LO
Isto irá sobrepor tudo o que o compositor pode ser capaz de ler a partir do repositório original composer.json
, incluindo as dependências do pacote e o autoloading.
A utilização do tipo package
transferirá o ónus da definição correcta tudo sobre ti. A maneira mais fácil é ter um arquivo composer.json
no repositório, e apenas usá-lo.
Esta solução só é realmente para os casos raros em que você tem um download ZIP abandonado que você não pode alterar, ou um repositório que você só pode ler, mas não é mais mantido.
"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"
}
Esse pacote de facto está disponível através do packagist. Você não precisa de uma definição de repositório personalizado neste caso. Certifique-se apenas de adicionar um require
(que é sempre necessário) com uma restrição de versão correspondente.
Em geral, se estiver disponível um pacote no packagist, não adicione um repo VCS. Só vai atrasar as coisas.
Para os pacotes que não estão disponíveis através do packagist, utilize um repositório de VCS (ou git), como mostrado no seu pergunta. Quando o fizer, certifique-se de que:
- O campo "repositórios" é especificado no compositor raiz.json (é um campo root-only, as definições do repositório dos pacotes necessários são ignoradas)
- a definição dos repositórios aponta para um repo vcs válido
- Se o tipo for " git "em vez de" vcs " (como na sua pergunta), certifique-se de que é de facto um git repo
- tem um
require
para o pacote em questão - a restrição no
require
corresponde ao versões fornecidas pelo Acordo de recompra VCS. Você pode usarcomposer show <packagename>
para encontrar as versões disponíveis. Neste caso~2.3
seria uma boa opção. - O nome no
require
corresponde ao nome no remotocomposer.json
. Neste caso, égedmo/doctrine-extensions
Aqui está uma amostra composer.json
que instala o mesmo pacote através de um repo VCS:
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
Oacordo de repo VCS explica tudo isto muito bem.
Se existir um repositório git (ou outro VCS) com um composer.json
Disponível, Faça não utilizar um acordo de recompra" pacote". Os acordos de recompra de pacotes exigem que você forneça todos dos meta-dados na definição e irá ignorar completamente qualquer composer.json
presente no dist e na fonte fornecidos. Eles também têm limitações adicionais, tais como não permitir atualizações adequadas na maioria dos casos.
Evitar acordos de recompra de pacotes (ver também os docs).
Poderá incluir o repositório git no compositor.json assim:
"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"
}
Diga ao compositor para usar o código, se disponível:
composer update --prefer-source
Ou:
composer install --prefer-source
Então irá obter pacotes como repositórios clonados em vez de tarballs extraídos, para que possa fazer algumas alterações e enviá-los de volta. Claro, assumindo que você tem permissões de escrita/envio para o repositório e o compositor sabe sobre o repositório do projeto.
Disclaimer: eu penso que eu posso responder a uma pergunta um pouco diferente, mas este era o que eu estava procurando quando eu encontrei esta pergunta, assim que eu espero que também seja útil aos outros.
Se o compositor não sabe onde está o repositório do projecto, ou se o projecto não tem o compositor adequado.json, a situação é um pouco mais complicada, mas outros já responderam a esses cenários.
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Se você está pedindo outro repo para fazer as suas próprias alterações você vai acabar com um novo repositório.
E. g:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
O novo url terá de ir para a secção de repositórios do seu compositor.json.
Lembre-se se quiser referir-se ao seu garfo como my-foo/bar
na sua secção de necessidades, terá de mudar o nome do pacote no ficheiro composer.json
dentro do seu novo Acordo de recompra.
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
Se você apenas bifurcou o mais fácil a forma de fazer isto é editá-lo dentro do github.
dev-master
em vez de master
como indicado neste post .
Se quiser usar um composer.json
do GitHub, veja este exemplo (sob a secção VCS).
A secção do pacote é para pacotes que não têm o {[[0]}. No entanto, você não seguiu esse exemplo também ou ele também teria funcionado. Leia o que diz sobre repositórios de pacotes:
Basicamente, você define a mesma informação que está incluída no repositório do compositor {[[2]}, mas apenas para um único pacote. Mais uma vez, o mínimo necessário os Campos São nome, versão, e ou de dist ou fonte.