Внесение вклада в пакеты с открытым исходным кодом из каталога поставщиков?

Идеальная ситуация

Часто во время работы над проектом Symfony2 я буду замечать то, что я хочу изменить в одной из моих зависимостей. Если бы я мог найти способ просто изменить его в вендоре, а затем легко вставить изменения в качестве запроса на перенос, то я, вероятно, внес бы более часто (вместо того, чтобы переопределять часть с локальным дочерним пакетом).

Проблема

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

Как я это делаю сейчас

Способ, которым я обычно вношу свой вклад в пакет, - это сделать вилку, поместить вилку в стандартное приложение для Symbony Symbol, внести изменения и затем отправить запрос на перенос.

Положить вилку в composer.json?

Единственное решение, о котором я могу думать, - это удаление зависимости пакета от меня, которое я редактирую, а затем включить мою вилку с композитором (в виде пакета) из github. Таким образом, я получаю свой код сразу и все еще могу внести свой вклад.

Это единственное решение? Как вы это делаете?

Любые советы/советы для внесения вклада в пакет при работе над другим проектом в одно и то же время будут оценены!

Ответ 1

[UPDATE: Answer Not Valid Anymore]

Как указано в одном из комментариев, этот ответ пару лет, и он больше не прав. См. Ответы ниже для правильного пути.

[Исходный ответ ниже]

Это подход, рекомендованный Хорди Богджано (@Seldaek), создателем композитора. См. Его разговор в Symfony Live San Francisco в начале этого года (со знаком 2 минуты): http://www.youtube.com/watch?list=PLo7mBDsRHu11ChvScWUE7MN1Qo5QVHQEz&feature=player_detailpage&v=P3NwF8RV1lY#t=120s

Ответ 2

Не... это сломано.

Я пробовал официальный способ включить вилку, вот пример (оригинал: kitano, fork: jstoeffler) из composer.json:

( Для тех, кто спешит: ЭТО ДЕЛАЕТ РАБОТУ)

"repositories": [
//...
    {
        "type": "vcs",
        "url": "https://github.com/jstoeffler/KitanoConnectionBundle",

    },
//...
],

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

"repositories": [
//...
    {
        "type": "package",
        "package": {
            "name": "kitano/connection-bundle",
            "version": "dev-master",
            "source": {
                "url": "https://github.com/jstoeffler/KitanoConnectionBundle.git",
                "type": "git",
                "reference": "master"
            },
            "autoload": {
                "classmap": [""]
            }
        }
    },
//...
],

Ответ 3

FYI, я просто попробовал самый первый вариант:

    "repositories": [{
    "type": "vcs",
    "url": "https://github.com/thujohn/twitter"
}],
"require": {
    "laravel/framework": "4.2.*",
    "thujohn/twitter": "dev-master",
    "anahkiasen/flickering": "^0.1.2",
    "fairholm/elasticquent": "dev-master",
    "facebook/php-sdk-v4" : "~5.0"
},

Он работал нормально.

[email protected]:/var/www$ sudo php composer.phar update
Loading composer repositories with package information                                                                                                                                                         Updating dependencies (including require-dev)         
  - Removing thujohn/twitter (2.0.4)
  - Installing thujohn/twitter (dev-master 7a92118)
    Downloading: 100%         

Writing lock file
Generating autoload files
> php artisan clear-compiled
> php artisan optimize
Generating optimized class loader

Мне просто нужно было указать имя ветки "master" как "dev-master".