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 ?

Neilime
la source

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

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

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

Luis Mata B.
la source
7

Selon la documentation de Composer http://getcomposer.org/doc/05-repositories.md#vcs , il suffit de spécifier le référentiel d'origine (pas le fork) dans le require("nodge / lessphp" dans votre cas). Composer installera alors VOTRE fork (regardez le code dans les vendeurs)

Elvis Ciotti
la source
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
Sam
la source
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": "*"
    }
}
utilisateur3497737
la source