理想情况
通常在处理Symfony2项目时,我会发现我想在其中一个依赖项中更改的内容。如果我能找到一种方法来简单地在供应商中更改它,然后轻松地将更改作为拉取请求推送,那么我可能会更频繁地做出贡献(而不是用本地子包覆盖该部分)。
问题
如果没有作曲家在下次更新时吓坏我,我无法更改供应商目录。如果我提交拉取请求,那么我可能需要一段时间才能真正使用供应商中的代码,这实际上是对我的新功能的贡献。
我现在怎么做
我通常对捆绑包做出贡献的方法是制作一个fork,将fork放入一个准系统symfony标准版应用程序中,进行更改,然后提交一个pull请求。
将叉子放入composer.json
?
我能想到的唯一解决方案是删除我正在编辑的包的包装依赖关系,然后从github包含我的fork与composer(作为包)。这样我就可以立即得到我的代码并且仍然可以做出贡献。
这是唯一的解决方案吗?你是怎么做到的?
任何在同一时间处理不同项目时为捆绑做出贡献的提示/建议都将不胜感激!
答案 0 :(得分:38)
不......这已经破了。
我尝试过使用fork的官方方法,这是composer.json的一个例子(原文:kitano,fork:jstoeffler):
(对于那些匆忙的人:这样做不行)
"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": [""]
}
}
},
//...
],
答案 1 :(得分:7)
[更新:答案无效]
正如其中一条评论所指出的,这个答案已经有几年了,不再正确了。请参阅下面的答案,了解正确的方法。
[原帖在下面]
这是作曲家创作者Jordi Boggiano(@Seldaek)推荐的方法。 从他今年早些时候在Symfony Live旧金山的演讲中看到的(2分钟时刻): http://www.youtube.com/watch?list=PLo7mBDsRHu11ChvScWUE7MN1Qo5QVHQEz&feature=player_detailpage&v=P3NwF8RV1lY#t=120s
答案 2 :(得分:2)
截至2017年,正确的做法是:
将您的GitHub分支链接添加到repositories
"repositories": [
{
"type": "vcs",
"url": "https://github.com/crimson-med/yii2-link-preview"
}
],
将源添加到require
的{{1}}
composer.json
答案 3 :(得分:0)
仅供参考,我刚尝试了第一个选项:
"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"
},
它运作良好。
vagrant@dev:/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"。