作曲家和第三方错误

时间:2015-01-13 12:58:42

标签: php git symfony composer-php

在开发Symfony2项目时,我经常遇到第三方捆绑包中的错误。大多数情况下,这些错误很微妙但很难找到。例如,仅在本周,我就发现了三个错误,其中使用简单的if ( $value )构造测试了值,但需要使用( $value !== null)( $value !== false )

如果对相关项目的相关github页面没有足够的权限,我能做的最好就是推送拉取请求。合并请求通常需要相当长的时间。同时,特别是在使用主版本时,其他拉取请求被合并,这反过来导致作曲家更新。发生这种情况时,任何本地错误修复都将恢复为原始代码。

有没有办法处理这种情况?

理想情况下,我希望第三方软件包更新,但我的修改仍然存在。直到pull请求合并为止。

2 个答案:

答案 0 :(得分:5)

有一个项目允许您在使用composer下载包后应用补丁。它被创建用于Drupal项目,但我相信它也应该与你自己的补丁一起使用。

https://github.com/jpstacey/composer-patcher

否则,你可以分叉项目,改进,提交拉取请求,同时在composer中使用你自己的分叉存储库。有关如何实现这一点的详细说明,请参见[此答案] [https://stackoverflow.com/a/14637668/3492835)。

修改
明星们说它现在即将成为2016年,并且有些事情发生了变化。 {}被认为已弃用jpstacey/composer-patcher以支持netresearch/composer-patches-plugin项目。这是一个基本相同的Composer插件,但它也可以应用本地补丁。

答案 1 :(得分:3)

Composer不支持开箱即用的此功能。原因很简单,不应该使用其他库的开发版本。但不要害怕,你可以通过在GitHub上分配项目来轻松解决这个问题。当然这意味着很多的开销,但这是我能想到的最好的解决方案,你可以解决这个问题。

请注意,与补丁方法相比,此方法有几个优点:

  1. 您可以直接从分叉创建拉取请求。
  2. git merge过程将识别任何冲突。
  3. 自动化此过程的脚本很简单:

    #!/bin/sh
    
    git fetch upstream
    git checkout master
    git merge upstream/master
    

    您可以创建一个Composer post更新/安装脚本,如果它是您的一个分支,它将在每个项目本地目录中执行这些命令。 (我将这个实现部分留给了读者。但是首先需要在本地创建存储库,因为Composer只下载没有存储库数据的最新文件。这可能会为项目添加巨大的.git文件夹,因为有些项目是,好吧,巨大的。)