Como exigir um garfo com compositor


172

aqui está o meu compositor.json, eu quero usar o projeto fork do lessphp de Nodge no Github

 "repositories": [{
    "type": "package",
    "package": {
        "version": "dev-master",
        "name": "nodge/lessphp",
        "source": {
            "url": "https://github.com/Nodge/lessphp.git",
            "type": "git",
            "reference": "master"
        },
        "autoload": {
            "classmap": ["lessc.inc.php"]
        }
    }
}],
"require": {
    "php": ">=5.3.3",
    "nodge/lessphp": "dev-master"
},

Mas eu tenho esse erro ao fazer a atualização:

nodge / lessphp dev-master -> nenhum pacote correspondente encontrado.

Não sei como solicitá-lo corretamente neste garfo ...

Alguma sugestão ?

Respostas:


228

A maneira mais comum (e mais fácil) de fazer isso é usar um repositório VCS.

Tudo que você precisa fazer é adicionar seu fork como um repositório e atualizar a restrição de versão para apontar para sua ramificação personalizada. Seu nome de filial personalizado deve ser prefixado dev-.

Exemplo supondo que você corrigiu o monolog para corrigir um erro no ramo de correções de erros:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/igorw/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}

Observe que você não altera a instrução require, exceto para especificar seu ramo de correção de bug. Você ainda faz referência ao pacote upstream ( monolog/monolog), não seu fork pessoal ( igorw/monolog). Você pode ler detalhes nos documentos


6
Isso não parece funcionar para o github.com/Polycademy/purl, que é um fork do github.com/jwage/purl . Estou tentando: "repositórios": [{"type": "vcs", "url ":" git@github.com: Polycademy / purl.git "}] e" require ": {" jwade / purl ":" dev-master ",}, mas continuo recebendo: Problema 1 - O pacote solicitado jwade / purl não foi encontrado em nenhuma versão; pode haver um erro de digitação no nome do pacote.
CMCDragonkai

11
O @CMCDragonkai que tenta executá- composer show jwade/purl -vlo deve informar por que ele ignorou a versão dev-master.
Seldaek #

4
@seldaek você me salvou! obrigado! (Meu fork foi chamado dev-dev- ..) não sabia que a nomeação era automaticamente.
Miguel Stevens

15
"Leia a documentação" é uma resposta ruim, uma resposta melhor seria dar um exemplo concreto
oskarth

7
É bom avisar sobre não fazer referência a garfo pessoal. Isso salvou meu dia, +1
edrian

42

Usando VCS funciona:

"name": "test/test",
"repositories": [{
    "type": "vcs",
    "url": "http://github.com/Nodge/lessphp"
}],
"require": {
    "leafo/lessphp": "dev-master"
},

Mas se eu precisar de um módulo que possua isso composer.json, ele não funcionará. Ele instala o projeto original, não o garfo.

Exemplo

"name": "example/example",
"require": {
    "test/test": "dev-master"
},

Eu devo mencionar novamente o repositório. Isso é normal?


mesmo aqui mesmo problema
Aysennoussi 23/05

Exclua manualmente o módulo usando "rm -rf" e, em seguida, "atualização do compositor". Isso funcionou para mim.
Hubert Perron

3
Eu usei uma dúzia de garfos, e isso nunca funcionou . Aqui está uma solução de trabalho: stackoverflow.com/a/27970559/183904
Julien

4
@ Julien, acabei de usar esse método e ele funcionou como um encanto ... Os documentos são bem claros, você deve se lembrar de colocar o prefixo dev no seu nome de filial personalizado ao solicitar o pacote em questão.
mTorres

2
Funcionou para mim ... mas quero mencionar que eu precisava usar https: // para o URL.
usar o seguinte comando

33

Se você não conseguir que a resposta do @Neilime funcione para você, verifique se o garfo usa um ramo diferente.

Por exemplo, envie suas alterações para uma ramificação em seu fork chamada my-bugfix, não adicione dev-prefixo no nome da ramificação, mas no composer.json você precisará adicioná-lo. Seu arquivo de compositor será parecido com:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},

1
Esta é uma explicação engenhosa e clara para mim! Obrigado !
Dominik

1
mas e se for o garfo de outra pessoa ? Veja o exemplo aqui
abbood

Além disso, o namecampo no composer.jsonarquivo do seu repositório bifurcado deve permanecer o mesmo com o proprietário original.
NecipAllef 23/03

11

Eu tentei muitas opções, mas depois que recebi este post, vi a luz e funcionou perfeitamente.

Isto é o que você tem que fazer:

1- Forquilha de repositório

2- Crie uma filial e faça as modificações necessárias.

3- Adicione o rótulo do repositório ao seu compositor.json

"repositories": [

        {
            "type": "vcs",
            "url": "https://github.com/user/yourforkname"
        }
    ]

4- Na linha de comando dentro do seu projeto, exija seu fork como este:

composer require vendor/packagename:dev-branchname

E voilá !!

Você tem sua versão de garfo funcionando



5

Portanto, este é 2019, e a maioria das respostas aqui já estão corretas.

Se você se encontrar, no entanto, em uma situação em que precisa exigir uma ramificação específica do seu fork (criada por você), peça ao compositor que liste as versões / tags disponíveis primeiro. Isso me salvou muito tempo.

Um exemplo completo com spatie/laravel-backup pacote.

Primeiro, adicione a repositorieschave ao compositor.json. Com o URL do seu garfo

"repositories": [{
   "type": "vcs",
   "url": "https://github.com/holymp2006/laravel-backup"
 }]

Obter versões / tags disponíveis

composer show "spatie/laravel-backup" --all

Escolha a versão desejada versionsna saída do terminal e exija essa versão

composer require spatie/laravel-backup:v5.x-dev

2

Normalmente, adiciono um nó "dist" à definição do pacote. Eu nunca tive problemas em usá-lo dessa maneira.

Não me lembro de onde tirei esse truque, para mais explicações.

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "version": "dev-master",
                "name": "nodge/lessphp",
                "source": {
                    "url": "https://github.com/Nodge/lessphp.git",
                    "type": "git",
                    "reference": "master"
                },
                "autoload": {
                    "classmap": ["lessc.inc.php"]
                },
                "dist": {
                    "url": "https://github.com/Nodge/lessphp/archive/master.zip",
                    "type": "zip"
                }
            }
        }
    ],
    "require": {
        "nodge/lessphp": "*"
    }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.