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 ?

Neilime
fonte

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

Seldaek
fonte
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 ":" [email protected]: 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?

Neilime
fonte
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"
},
Boedy
fonte
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

Luis Mata B.
fonte
7

De acordo com a documentação do Composer http://getcomposer.org/doc/05-repositories.md#vcs , basta especificar o repositório original (não o fork) no require("nodge / lessphp" no seu caso). O compositor instalará o seu garfo (veja o código nos fornecedores)

Elvis Ciotti
fonte
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
Sam
fonte
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": "*"
    }
}
user3497737
fonte