Внесение вклада в пакеты с открытым исходным кодом из каталога поставщиков?
Идеальная ситуация
Часто во время работы над проектом 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".