Wie man eine Gabel mit Komponist benötigt


172

hier ist mein composer.json, ich möchte Nodge's Fork of Lessphp-Projekt auf Github verwenden

 "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"
},

Aber ich habe diesen Fehler, wenn ich ein Update mache:

nodge / lessphp dev-master -> kein passendes Paket gefunden.

Ich weiß nicht, wie ich diese Gabel richtig benötigen soll ...

Irgendwelche Vorschläge ?

Antworten:


228

Die häufigste (und einfachere) Methode ist die Verwendung eines VCS-Repositorys.

Sie müssen lediglich Ihre Abzweigung als Repository hinzufügen und die Versionsbeschränkung so aktualisieren, dass sie auf Ihren benutzerdefinierten Zweig verweist. Ihrem benutzerdefinierten Filialnamen muss ein Präfix vorangestellt werden dev-.

Beispiel unter der Annahme, dass Sie Monolog gepatcht haben, um einen Fehler im Bugfix-Zweig zu beheben:

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

Beachten Sie, dass Sie die require-Anweisung nur ändern, um Ihren Bugfix-Zweig anzugeben. Sie verweisen weiterhin auf das Upstream-Paket ( monolog/monolog), nicht auf Ihre persönliche Gabel ( igorw/monolog). Sie können Details in den Dokumenten lesen


6
Dies scheint für github.com/Polycademy/purl nicht zu funktionieren. Dies ist eine Abzweigung von github.com/jwage/purl. Ich habe versucht: "repositories": [{"type": "vcs", "url ":" git@github.com: Polycademy / purl.git "}] und" require ": {" jwade / purl ":" dev-master ",}, aber ich bekomme immer wieder: Problem 1 - Das angeforderte Paket jwade / purl konnte in keiner Version gefunden werden, der Paketname enthält möglicherweise einen Tippfehler.
CMCDragonkai

11
@CMCDragonkai Wenn Sie versuchen, composer show jwade/purl -ves auszuführen, sollten Sie erfahren, warum die Dev-Master-Version ignoriert wurde, wenn dies der Fall ist.
Seldaek

4
@seldaek du hast mich gerettet! Danke! (Meine Gabel hieß dev-dev- ..) wusste nicht, dass die Benennung automatisch erfolgte.
Miguel Stevens

15
"Read the docs" ist eine schlechte Antwort, eine bessere Antwort wäre, ein konkretes Beispiel zu geben
oskarth

7
Schön zu warnen, dass nicht auf die persönliche Gabel verwiesen wird. Dies rettete meinen Tag, +1
Edrian

42

Die Verwendung von VCS funktioniert:

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

Aber wenn ich ein Modul benötige, das dies hat composer.json, funktioniert es nicht. Es installiert das ursprüngliche Projekt, nicht die Gabel.

Beispiel

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

Ich sollte das Repository noch einmal erwähnen. Ist das normal?


das gleiche hier das gleiche Problem
Aysennoussi

Löschen Sie das Modul manuell mit "rm -rf" und dann mit "Composer Update". Das hat bei mir funktioniert.
Hubert Perron

3
Ich habe ein Dutzend Gabeln benutzt, und das hat nie funktioniert . Hier ist eine funktionierende Lösung: stackoverflow.com/a/27970559/183904
Julien

4
@ Julien, ich habe gerade diese Methode verwendet und sie hat wie ein Zauber funktioniert ... Die Dokumente sind ziemlich klar. Sie müssen nur daran denken, das Dev- Präfix in Ihren benutzerdefinierten Zweigstellennamen einzufügen, wenn Sie das betreffende Paket benötigen.
mTorres

2
Hat für mich funktioniert ... aber ich möchte erwähnen, dass ich https: // für die URL verwenden musste.
plong0

33

Wenn Sie die @ Neilime-Antwort nicht für sich arbeiten lassen können, stellen Sie sicher, dass Ihre Gabel einen anderen Zweig verwendet.

Schieben Sie Ihre Änderungen beispielsweise in einen Zweig auf Ihrer Verzweigung, der aufgerufen my-bugfixwird. Fügen Sie Ihrem Zweignamen kein dev-Präfix hinzu, sondern in Ihrer composer.json müssen Sie es hinzufügen. Ihre Komponistendatei sieht folgendermaßen aus:

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

1
Das ist eine geniale und klare Erklärung für mich! Danke !
Dominik

1
aber was ist, wenn es die Gabel eines anderen ist ? Siehe Beispiel hier
Abbood

Außerdem sollte das nameFeld in der composer.jsonDatei Ihres gegabelten Repositorys beim ursprünglichen Eigentümer gleich bleiben.
NecipAllef

11

Ich habe viele Optionen ausprobiert, aber nachdem ich diesen Beitrag erhalten hatte, sah ich das Licht und es funktionierte einfach perfekt.

Folgendes müssen Sie tun:

1- Fork de Repository

2- Erstellen Sie eine Verzweigung und nehmen Sie die erforderlichen Änderungen vor.

3- Fügen Sie Ihrer composer.json das Repository-Label hinzu

"repositories": [

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

4- In der Befehlszeile Ihres Projekts benötigen Sie Ihre Gabel wie folgt:

composer require vendor/packagename:dev-branchname

Und Voilá !!

Sie haben Ihre Gabelversion funktioniert



5

Das ist also 2019 und die meisten Antworten hier sind bereits richtig.

Wenn Sie sich jedoch in einer Situation befinden, in der Sie eine bestimmte Niederlassung benötigen Ihrer Gabel (den Sie erstellt haben) , lassen Sie den Komponisten zuerst die verfügbaren Versionen / Tags auflisten. Das hat mir viel Zeit gespart.

Ein vollständiges Beispiel mit spatie/laravel-backup Paket.

Fügen Sie zunächst den repositoriesSchlüssel zu composer.json hinzu. Mit der URL Ihrer Gabel

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

Erhalten Sie verfügbare Versionen / Tags

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

Wählen Sie versionsin der Terminalausgabe die gewünschte Version aus und fordern Sie diese Version an

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

2

Normalerweise füge ich der Paketdefinition einen "dist" -Knoten hinzu. Ich hatte nie ein Problem damit.

Ich kann mich jedoch nicht erinnern, woher ich diesen Trick für weitere Erklärungen habe.

{
    "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": "*"
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.