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

Вот мой 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 -> соответствующий пакет не найден.

Я не знаю, как правильно требовать эту вилку...

Какие-либо предложения?

6 ответов

Решение

Наиболее распространенный (и более простой) способ сделать это - использовать хранилище VCS.

Все, что вам нужно сделать, это добавить свой форк в качестве репозитория и обновить ограничение версии, чтобы оно указывало на вашу пользовательскую ветку. Ваше пользовательское имя ветки должно начинаться с префикса dev-,

Пример, предполагающий, что вы исправили монолог, чтобы исправить ошибку в ветке исправления ошибок:

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

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

Использование 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"
},

Я должен еще раз упомянуть хранилище. Это нормально?

Если вы не можете заставить ответ @Neilime работать на вас, убедитесь, что ваш форк использует другую ветку.

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

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

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

Вот что вам нужно сделать:

1- Форк репозиторий

2- Создайте ветку и внесите необходимые изменения.

3- Добавьте метку хранилища в ваш composer.json

"repositories": [

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

4- В командной строке внутри вашего проекта требуется ваш форк, как это:

composer require vendor/packagename:dev-branchname

И вуаля!!

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

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

Итак, это 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

Я обычно добавляю узел 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": "*"
    }
}

Принятый ответ и уточняющие ответы - все это хорошо сработало для меня, когда у меня был бывший. приложения, которые нуждались в I зависимости были раздвоенные и модифицированы. В этом случае я бы все равно использовал принятый ответ.

Однако, когда у меня был пакет, который я хотел распространить на Packagist, который также содержал разветвленную и измененную зависимость, этот подход больше не работал.

Если кто-то попытается установить с этой конфигурацией, он все равно получит то же самое -> no matching package found. сообщение об ошибке.

Этот ответ и связанные документы Composer предполагают, что настройки репо должны быть на верхнем уровне composer.json. Это означает, что кто-то, устанавливающий этот пакет, должен будет добавить эту конфигурацию в свой composer.json файл тоже, что добавляет много ненужной путаницы в процесс установки.

Вместо этого я опубликовал свою вилку в Packagist. Я понимаю, что, хотя форки не одобряются, это будет считаться поддерживаемым форком, поскольку я использую его для этого нового пакета.

Надеюсь, это будет полезно для всех, у кого есть проблема с пакетом или библиотекой, которые они хотели бы распространять.

Другие вопросы по тегам