2

我在 Symfony2 中的一个项目已经完成了一半。

我需要使用 composer 安装几个新的供应商包。

我已经在版本控制(包括供应商文件夹)中拥有了所有内容(减去日志、缓存和 parameters.yml)。

问题是使用 composer update 时,它​​会删除更新的供应商文件夹中的 .svn 文件夹。所以现在基本上不可能提交(给我没有工作副本错误)。

附加信息:我在本地工作并提交到开发服务器,然后一旦批准了应用程序服务器。因此它必须是完美的(不能只在提交后在开发/应用服务器上运行 php composer install 或 php composer update )。

我还尝试导出所有内容并将它们复制并粘贴回存储库,但这也不起作用(索引页面在本地损坏)。

4

4 回答 4

1

关于供应商版本控制,最好的方法根本不是版本供应商。

您需要版本化的唯一内容是composer.jsoncomposer.lock。这可能会导致没有稳定版本的供应商或您不需要稳定版本的供应商出现问题(例如,具有特定提交的主控)。

作为一种解决方案,您应该创建自己的(私有)供应商存储库(假设您自己的打包师)。Composer 有一个工具,叫做 Satis。

https://github.com/composer/satis

所以我的建议是:

  1. 使用 Satis 创建一个私有存储库。您将所需的每个包放入其中,satis.json并且每当您需要更新供应商版本或添加新版本时,您只需修改 satis.json 并重建存储库。
  2. 在您的项目中composer.json,您将新的私有存储库设置为唯一的存储库并设置选项:packagistto false
  3. 现在,每次运行composer install时它都只会使用您的私有存储库,因此速度很快,而且您始终可以确保每个环境都具有相同的版本

-

于 2014-09-17T14:33:45.817 回答
0

不建议在您的代码库中包含供应商包,因此如果您需要维护在本地计算机上使用的相同版本的包,最好的方法是将composer.lock保留在 VCS 中并仅在其他环境中运行composer install 。

此外,如果您希望 prod 部署是即时的,而不依赖于 composer 进程,您可以在 dev 服务器上运行composer install,一旦验证通过,您可以让您的 prod 部署脚本从 dev env 复制 vendor 文件夹。

于 2014-09-17T14:27:40.003 回答
0

两年前我也有类似的情况。

我学到的惨痛教训是永远不要在供应商内部编辑文件。起初我完全拒绝使用composer并手动克隆我需要的一切。后来,我决定分叉我需要编辑的项目并引用我的分叉。

Composer 支持私有 GitHub 存储库 - 您无需将其注册到 Packagist 即可工作。

于 2014-09-17T14:21:22.050 回答
0

您不应将vendor目录保留在版本控制中。这就是在Symfony 标准版中的完成方式,您应该遵循这一点。运行composer install命令应该是部署过程的一部分

于 2014-09-17T14:24:24.837 回答