Як вимагати виделку з композитором


172

ось мій composer.json, я хочу використовувати вилку Nodge проекту меншеphp в 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"
},

Але у мене є ця помилка, коли я роблю оновлення:

nodge / lessphp dev-master -> не знайдено відповідного пакету.

Я не знаю, як правильно зажадати цю виделку ...

Будь-які пропозиції ?

Відповіді:


228

Найпоширеніший (і простіший) спосіб зробити це за допомогою сховища VCS.

Все, що вам потрібно зробити - це додати свою вилку як сховище та оновити обмеження версії, щоб вказати на вашу власну гілку. Власне ім’я відділення має бути встановлено з префіксом dev-.

Приклад, припускаючи, що ви виправили монолог, щоб виправити помилку у гілці помилок:

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

Зауважте, що ви не потребуєте зміни оператора, крім того, щоб вказати свою гілку помилок. Ви все ще посилаєтеся на пакет вище ( monolog/monolog), а не на особисту вилку ( igorw/monolog). Ви можете прочитати деталі в документах


6
Мабуть, це не працює для github.com/Polycademy/purl, який є роздрібною групою github.com/jwage/purl Я намагався: "сховища": [{"type": "vcs", "url ":" git@github.com: Polycademy / purl.git "}] та" вимагаю ": {" jwade / purl ":" dev-master ",}, але я продовжую отримувати: Проблема 1 - Запрошений пакет jwade / purl не вдалося знайти в жодній версії, можливо, в назві пакета може бути помилка друку.
CMCDragonkai

11
Спробуйте запустити @CMCDragonkai, composer show jwade/purl -vто слід сказати, чому він ігнорував версію dev-master, якщо це так.
Seldaek

4
@seldaek ти мене врятував! спасибі! (Мою вилку називали dev-dev- ..) не знав, що називання було автоматично.
Мігель Стівенс

15
"Прочитайте документи" - це погана відповідь, кращою відповіддю було б дати конкретний приклад
оскарт

7
Приємно попередити про не посилання на особисту вилку. Це врятувало мені день, +1
Едріан

42

Використання VCS працює:

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

Але якщо мені потрібен модуль, який має це composer.json, він не працює. Він встановлює оригінальний проект, а не вилку.

Приклад

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

Я знову хочу згадати сховище. Це нормально?


та ж тут сама проблема
Айсенноусси

Видаліть модуль вручну за допомогою "rm -rf", а потім "оновлення композитора". Це працювало для мене.
Хуберт Перрон

3
Я використав десяток виделок, і це ніколи не спрацювало . Ось робоче рішення: stackoverflow.com/a/27970559/183904
Жульєн

4
@Julien, я тільки що використовував цей метод, і він спрацьовував як шарм ... Документи цілком зрозумілі, ви повинні пам’ятати лише про те, щоб вставити dev- префікс у своє спеціальне ім’я гілки, коли вимагаєте відповідного пакета.
mTorres

2
Працювало для мене ... але хочу зазначити, що мені потрібно було використовувати https: // для URL-адреси.
plong0

33

Якщо ви не можете отримати відповідь @Neilime для вас, переконайтеся, що ваша вилка використовує іншу гілку.

Наприклад, натисніть на зміни до гілки на вилці, що називається my-bugfix, не dev-додайте префікс у назву вашої гілки, але у composer.json ви повинні додати її. Ваш композиторський файл буде виглядати так:

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

1
Це геніальне і чітке пояснення для мене! Спасибі !
Домінік

1
але що робити, якщо це чужа виделка? Дивіться приклад тут
abbood

Також nameполе у composer.jsonфайлі вашого роздвоєного сховища повинне залишатися незмінним з початковим власником.
NecipAllef

11

Я спробував багато варіантів, але після того, як я отримав цю посаду, я побачив світло, і воно просто спрацювало ідеально.

Ось що вам потрібно зробити:

1- сховище форк

2- Створіть гілку та внесіть необхідні зміни.

3- Додайте мітку сховища до свого composer.json

"repositories": [

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

4- У командному рядку всередині вашого проекту потрібна ваша вилка таким чином:

composer require vendor/packagename:dev-branchname

І Вуала !!

У вас працює версія виделки


7

Відповідно до документації для композитора http://getcomposer.org/doc/05-repositories.md#vcs , достатньо вказати оригінальний сховище (а не вилку) у require("nodge / lessphp" у вашому випадку). Потім композитор встановить ВАШУ виделку (подивіться код у постачальників)


5

Отже, це 2019 рік, і більшість відповідей тут уже правильні.

Якщо ви опинитесь у ситуації, коли вам потрібно зажадати певну гілку вашої вилки (яку ви створили), спочатку запропонуйте композитору перелічити наявні версії / теги. Це врятувало мені багато часу.

Повний приклад з spatie/laravel-backupпакетом.

Спочатку додайте repositoriesключ до composer.json. З URL-адресою вилки

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

Отримайте доступні версії / теги

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

Виберіть потрібну версію versionsв термінальному виході, а потім вимагайте її

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

2

Я зазвичай додаю вузол "dist" до визначення пакету. У мене ніколи не було проблем використовувати його таким чином.

Я не можу пригадати, звідки я взяв цей фокус для будь-яких подальших пояснень.

{
    "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": "*"
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.