25

理想情况

通常在处理 Symfony2 项目时,我会在我的一个依赖项中发现我想要更改的内容。如果我能找到一种方法来简单地在供应商中更改它,然后轻松地将更改作为拉取请求推送,那么我可能会更频繁地做出贡献(而不是用本地子包覆盖该部分)。

问题

如果没有作曲家在下一次更新时吓坏了,我就无法更改供应商目录。如果我提交一个拉取请求,那么我可能需要相当长的时间才能真正在供应商中使用代码,这实际上是对贡献我的新功能的一种威慑。

我现在怎么做

我通常为捆绑包做贡献的方式是创建一个分支,将分支放入准系统 symfony 标准版应用程序中,进行更改,然后提交拉取请求。

把叉子放进去composer.json

我能想到的唯一解决方案是删除我正在编辑的包的 packagegist 依赖项,然后将我的 fork 与来自 github 的 composer(作为一个包)包括在内。这样我可以立即获得我的代码并且仍然可以贡献。

这是唯一的解决方案吗?你怎么做呢?

在同时处理不同项目的同时为捆绑包做出贡献的任何提示/建议将不胜感激!

4

4 回答 4

49

唔……这个坏了。

我已经尝试过包含 fork 的官方方式,这是 composer.json 的一个示例(原始:kitano,fork:jstoeffler):

对于那些赶时间的人:这不起作用)

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

    },
//...
],

它继续使用原始 bundle。不知道问题是什么,我不明白一切是如何工作的,但这里是我如何成功地将 fork 添加到项目中。

"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": [""]
            }
        }
    },
//...
],
于 2015-01-15T18:34:29.477 回答
8

[更新:答案不再有效]

正如其中一条评论所指出的,这个答案已经有几年的历史了,不再正确了。请参阅下面的答案以了解正确的操作方式。

[下面的原始答案]

这是作曲家 Jordi Boggiano (@Seldaek) 推荐的方法。参见他今年早些时候在 Symfony Live San Francisco 上的演讲(在 2 分钟处): http ://www.youtube.com/watch?list=PLo7mBDsRHu11ChvScWUE7MN1Qo5QVHQEz&feature=player_detailpage&v=P3NwF8RV1lY#t=120s

于 2012-11-11T10:15:58.170 回答
6

截至2017年,正确的做法是:

  1. 将您的 GitHub 分支链接添加到repositories

    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/crimson-med/yii2-link-preview"
        }
    ],
    
  2. 将源添加到require您的composer.json

    "require": {
        "yii2mod/yii2-link-preview": "dev-master"
    },
    
于 2018-07-18T10:27:14.820 回答
1

仅供参考,我刚刚尝试了第一个选项:

    "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”。

于 2015-09-30T21:03:12.043 回答