Comment exiger un fork avec le compositeur


172

voici mon composer.json, je veux utiliser le projet fork of lessphp de Nodge sur 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"
},

Mais j'ai cette erreur lorsque je fais la mise à jour:

nodge / lessphp dev-master -> aucun package correspondant trouvé.

Je ne sais pas comment l'exiger correctement cette fourche ...

Aucune suggestion ?

Réponses:


228

La manière la plus courante (et la plus simple) de le faire est d'utiliser un référentiel VCS.

Tout ce que vous avez à faire est d'ajouter votre fork en tant que référentiel et de mettre à jour la contrainte de version pour qu'elle pointe vers votre branche personnalisée. Le nom de votre succursale personnalisée doit être précédé de dev-.

Exemple en supposant que vous avez patché monolog pour corriger un bogue dans la branche bugfix:

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

Notez que vous ne modifiez pas l'instruction require sauf pour spécifier votre branche de correction de bogue. Vous faites toujours référence au package amont ( monolog/monolog), pas à votre fork personnel ( igorw/monolog). Vous pouvez lire les détails dans la documentation


6
Cela ne semble pas fonctionner pour github.com/Polycademy/purl qui est un fork de github.com/jwage/purl que j'ai essayé de: "repositories": [{"type": "vcs", "url ":" git@github.com: Polycademy / purl.git "}], et" require ": {" jwade / purl ":" dev-master ",}, mais j'obtiens toujours: Problème 1 - Le paquet demandé jwade / purl n'a pu être trouvé dans aucune version, il peut y avoir une faute de frappe dans le nom du package.
CMCDragonkai

11
@CMCDragonkai essayer de l'exécuter composer show jwade/purl -vdevrait vous dire pourquoi il a ignoré la version dev-master si c'est le cas.
Seldaek

4
@seldaek vous m'avez sauvé! Merci! (Mon fork s'appelait dev-dev- ..) ne savait pas que le nom était automatiquement.
Miguel Stevens

15
"Lire la documentation" est une mauvaise réponse, une meilleure réponse serait de donner un exemple concret
oskarth

7
Agréable d'avertir de ne pas faire référence à une fourchette personnelle. Cela m'a sauvé la journée, +1
edrian

42

L'utilisation de VCS fonctionne:

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

Mais si j'ai besoin d'un module qui a ceci composer.json , cela ne fonctionne pas. Il installe le projet d'origine, pas la fourche.

Exemple

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

Je devrais mentionner à nouveau le référentiel. Est-ce normal?


même ici même problème
Aysennoussi

Supprimez manuellement le module en utilisant "rm -rf" puis "composer update". Cela a fonctionné pour moi.
Hubert Perron

3
J'ai utilisé une douzaine de fourches et cela n'a jamais fonctionné . Voici une solution de travail: stackoverflow.com/a/27970559/183904
Julien

4
@Julien, je viens d'utiliser cette méthode et cela a fonctionné comme un charme ... La documentation est assez claire, vous devez seulement vous rappeler de mettre le préfixe dev- dans votre nom de branche personnalisé lorsque vous avez besoin du paquet en question.
mTorres

2
Cela a fonctionné pour moi ... mais je tiens à mentionner que je devais utiliser https: // pour l'URL.
plong0

33

Si vous ne parvenez pas à faire fonctionner la réponse @Neilime pour vous, assurez-vous que votre fork utilise une branche différente.

Par exemple, transmettez vos modifications à une branche de votre fork appelé my-bugfix, n'ajoutez pas de dev-préfixe dans votre nom de branche mais dans votre composer.json, vous devez l'ajouter. Votre fichier compositeur ressemblera à ceci:

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

1
C'est une explication ingénieuse et claire pour moi! Je vous remercie !
Dominik

1
mais que faire si c'est la fourchette de quelqu'un d' autre ? Voir l'exemple ici
abbood

En outre, le namechamp dans le composer.jsonfichier de votre référentiel fourchu doit rester le même avec le propriétaire d'origine.
NecipAllef

11

J'ai essayé de nombreuses options, mais après avoir reçu ce message, j'ai vu la lumière et cela a fonctionné parfaitement.

Voici ce que vous devez faire:

1- Fork de référentiel

2- Créez une branche et apportez les modifications nécessaires.

3- Ajoutez le libellé du référentiel à votre composer.json

"repositories": [

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

4- Dans la ligne de commande de votre projet, vous avez besoin de votre fork comme ceci:

composer require vendor/packagename:dev-branchname

Et Voilá !!

Votre version de fourche fonctionne



5

Nous sommes donc en 2019 et la plupart des réponses ici sont déjà correctes.

Cependant, si vous vous trouvez dans une situation où vous avez besoin d'une branche particulière de votre fork (que vous avez créée), demandez à composer d'abord la liste des versions / balises disponibles. Cela m'a fait gagner beaucoup de temps.

Un exemple complet avec spatie/laravel-backuppackage.

Tout d'abord, ajoutez la repositoriesclé à composer.json. Avec l'url de votre fourchette

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

Obtenir les versions / tags disponibles

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

Choisissez la version que vous voulez versionsdans la sortie du terminal, puis exigez cette version

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

2

J'ajoute généralement un nœud "dist" à la définition du package. Je n'ai jamais eu de problème à l'utiliser de cette façon.

Je ne me souviens pas d'où j'ai tiré cette astuce, cependant, pour plus d'explications.

{
    "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": "*"
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.