Как потребовать форк с композитором


172

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

Обратите внимание, что вы не меняете оператор require, кроме как для указания своей ветки исправления ошибок. Вы по-прежнему ссылаетесь на пакет upstream ( monolog/monolog), а не на свой персональный fork ( igorw/monolog) Вы можете прочитать подробности в документации


6
Похоже, это не работает для github.com/Polycademy/purl, который является форком github.com/jwage/purl, который я пытался: "repositories": [{"type": "vcs", "url ":" git@github.com: Polycademy / purl.git "}] и" require ": {" jwade / purl ":" dev-master ",}, но я продолжаю получать: Проблема 1 - Запрошенный пакет jwade / purl не может быть найден ни в одной версии, в имени пакета может быть опечатка.
CMCDragonkai

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

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

15
«Читай документы» - плохой ответ, лучше бы привести конкретный пример
oskarth

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

И вуаля !!

У вас работает вилка



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.