Jak wymagać widelca z kompozytorem

172

oto mój plik composer.json, chcę użyć rozwidlenia projektu lessphp Nodge'a na 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"
},

Ale mam ten błąd podczas aktualizacji:

nodge / lessphp dev-master -> Nie znaleziono pasującego pakietu.

Nie wiem jak poprawnie wymagać tego widelca ...

Jakieś sugestie ?

Neilime
źródło

Odpowiedzi:

228

Najczęstszym (i łatwiejszym) sposobem zrobienia tego jest użycie repozytorium VCS.

Wszystko, co musisz zrobić, to dodać widelec jako repozytorium i zaktualizować ograniczenie wersji, aby wskazywało na niestandardową gałąź. Twoja nazwa oddziału niestandardowego musi być poprzedzona przedrostkiem dev-.

Przykład zakładając, że załatałeś monolog, aby naprawić błąd w gałęzi bugfix:

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

Zauważ, że nie zmieniasz instrukcji require z wyjątkiem określenia gałęzi naprawy błędów. Nadal odwołujesz się do upstream package ( monolog/monolog), a nie do swojego osobistego fork ( igorw/monolog). Możesz przeczytać szczegóły w dokumentach

Seldaek
źródło
6
Wydaje się, że to nie działa w przypadku github.com/Polycademy/purl, która jest rozwidleniem github.com/jwage/purl , które próbowałem: „repozytoria”: [{"type": "vcs", "url ":" [email protected]: Polycademy / purl.git "}] i" require ": {" jwade / purl ":" dev-master ",}, ale ciągle otrzymuję: Problem 1 - Żądany pakiet jwade / purl nie można znaleźć w żadnej wersji, w nazwie pakietu może być literówka.
CMCDragonkai
11
@CMCDragonkai spróbuj uruchomić composer show jwade/purl -v, powinien powiedzieć, dlaczego zignorował wersję dev-master, jeśli tak.
Seldaek
4
@seldaek, uratowałeś mnie! Dziękuję Ci! (Mój fork nazywał się dev-dev- ..) nie wiedział, że nazewnictwo jest automatyczne.
Miguel Stevens
15
„Przeczytaj dokumentację” to zła odpowiedź, lepszą odpowiedzią byłoby podanie konkretnego przykładu
oskarth
7
Miło jest ostrzec przed brakiem odniesienia do osobistego widelca. To uratowało mi dzień, +1
edrian
42

Korzystanie z VCS działa:

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

Ale jeśli potrzebuję modułu, który to ma composer.json, to nie działa. Instaluje oryginalny projekt, a nie fork.

Przykład

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

Powinienem jeszcze raz wspomnieć o repozytorium. Czy to normalne?

Neilime
źródło
ten sam tutaj ten sam problem
Aysennoussi
Ręcznie usuń moduł za pomocą „rm -rf”, a następnie „Composer update”. To zadziałało dla mnie.
Hubert Perron,
3
Użyłem kilkunastu widelców i to nigdy nie działało . Oto działające rozwiązanie: stackoverflow.com/a/27970559/183904
Julien
4
@Julien, właśnie stosowali tę metodę i to działało jak urok ... W docs są całkiem jasne, trzeba tylko pamiętać, aby umieścić spustoszone prefiks w niestandardowej nazwy oddziału gdy wymagając dany pakiet.
mTorres
2
Pracowało dla mnie ... ale chcę wspomnieć, że musiałem użyć https: // jako adresu URL.
plong0
33

Jeśli nie możesz uzyskać odpowiedzi @Neilime, która działa dla Ciebie, upewnij się, że Twój fork używa innej gałęzi.

Na przykład wypchnij swoje zmiany do gałęzi na twoim forku o nazwie my-bugfix, nie dev-dodawaj przedrostka do nazwy gałęzi, ale w pliku composer.json musisz go dodać. Twój plik kompozytora będzie wyglądał następująco:

"repositories":
[
    {
        "type": "vcs",
        "url": "http://github.com/yourname/packageName"
    }
],
"require": {
    "owner/packageName": "dev-my-bugfix"
},
Boedy
źródło
1
To dla mnie genialne i jasne wyjaśnienie! Dziękuję Ci !
Dominik
1
ale co jeśli to widelec kogoś innego ? Zobacz przykład tutaj
abbood
Ponadto namepole w composer.jsonpliku twojego rozwidlonego repozytorium powinno pozostać takie samo jak pierwotnego właściciela.
NecipAllef
11

Próbowałem wielu opcji, ale po tym, jak dostałem ten post, zobaczyłem światło i działało idealnie.

Oto, co musisz zrobić:

1- Fork de repository

2- Utwórz gałąź i wprowadź wymagane modyfikacje.

3- Dodaj etykietę repozytorium do pliku composer.json

"repositories": [

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

4- W wierszu poleceń w projekcie wymagaj widelca w następujący sposób:

composer require vendor/packagename:dev-branchname

I Voilá !!

Masz działającą wersję widelca

Luis Mata B.
źródło
7

Zgodnie z dokumentacją Composera http://getcomposer.org/doc/05-repositories.md#vcs , wystarczy określić oryginalne repozytorium (nie rozwidlenie) w require(„nodge / lessphp” w twoim przypadku). Composer zainstaluje następnie TWÓJ fork (spójrz na kod u dostawców)

Elvis Ciotti
źródło
5

Tak więc jest rok 2019 i większość odpowiedzi tutaj jest już poprawnych.

Jeśli jednak znajdziesz się w sytuacji, w której potrzebujesz określonej gałęzi twojego fork (którą stworzyłeś), najpierw poproś kompozytora o listę dostępnych wersji / tagów. To zaoszczędziło mi dużo czasu.

Pełny przykład z spatie/laravel-backuppakietem.

Najpierw dodaj repositoriesklucz do pliku composer.json. Z adresem URL swojego widelca

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

Uzyskaj dostępne wersje / tagi

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

Wybierz żądaną wersję versionsw danych wyjściowych terminala, a następnie wymagaj tej wersji

composer require spatie/laravel-backup:v5.x-dev
Sam
źródło
2

Zwykle dodaję węzeł „dist” do definicji pakietu. Nigdy nie miałem problemu z używaniem go w ten sposób.

Nie pamiętam jednak, skąd wziąłem tę sztuczkę, aby uzyskać dalsze wyjaśnienia.

{
    "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
źródło