【问题标题】:PHP Composer mixed with Git Submodules and Symfony2PHP Composer 与 Git 子模块和 Symfony2 混合
【发布时间】:2014-03-17 23:43:56
【问题描述】:

我在这里有一个项目,它是一个大型 Symfony2 应用程序,我希望将 git 子模块引入我们在内部构建的组件中。这里的问题是每个组件还需要作曲家包才能正常运行,现在我有 symfony2 应用程序的作曲家包和组件所需的作曲家包,我不确定如何在此处处理/设置这些依赖项。

目前我正在为我们添加的每个组件(git 子模块)手动运行“composer install”,这意味着每个组件都有自己的“vendor”文件夹,这远非理想,所以我来 Stack获得关于如何保持这些“symfony 作曲家依赖”和“组件作曲家依赖”易于维护的好建议。

我不需要确保 symfony2 应用程序的 deps 版本与组件 deps 同步,我只需要使其简单且可维护,而无需对我们设置的每个 git 子模块运行“composer update”。

谢谢!

编辑

我现在使用 composer 的 repositories 键来定义我公司私有 github 存储库的 URL。我可以提取一个单独的私人回购,我们称之为回购 A。但是,当我添加回购 B 并使回购 A require 回购 B 时,它无法正确解决。

repo A(用户报告组件)的composer.json:https://gist.github.com/dragoonis/6ea92e062762c516baea

Repo B(数据库组件)的 Composer.json:https://gist.github.com/dragoonis/e54b47b75a79b82ebaea

出现以下错误信息:https://gist.github.com/dragoonis/d79cd2c2dd5cc50bcd2a

opinurate/database-component 包确实存在,因为它是respositories 键中定义的存储库之一。

结论

这里的最终解决方案是使用 Satis 设置您自己的私有版本的 'packagist' 将与 packagist 一起使用。

我在“http://packages.mydomain.com”设置了 Satis,并在我的主应用程序 composer.json 文件中添加了一个“存储库”键到该 URL。现在,在评估包名称时,它将使用您自己的自定义 satis 服务器来为您提供 git URL。

【问题讨论】:

    标签: php git symfony composer-php


    【解决方案1】:

    我会说你最好的选择是通过 composer 而不是 git 子模块添加这些组件。它使编码和维护变得更加复杂,但它确保您的应用程序了解所有实际依赖项。

    如果您不希望它们公开并且想要一种更简单的方法来处理它们,那么我会在本地推出一个 Satis 部署并将它们全部注册在那里,将该 satis 存储库添加到您的 composer.json。

    Satis 是 Packagist 的更简单版本,只要带有它的服务器和运行 composer install 的机器可以访问您的私有存储库,其他任何东西都不会看到它们。 Composer 网站上有文档:https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md

    然后,您将设置 packages.yourcompany.com 并将其添加到您的 composer.json 作为软件包的替代来源。一切都保持私密。

    回复编辑: 发生这种情况是因为作曲家进行了划分,这意味着“存储库”只有您项目的 composer.json 知道,而 Repo A 中的那个不知道,所以它找不到它。您必须在其中重新定义存储库。即使使用 Satis,也必须将“satis”地址添加到所有涉及的 composer.json 文件中。

    将您在应用程序中添加的“存储库”内容添加到存储库 A 和 B 中的 composer.json,它应该可以解决所有问题。

    【讨论】:

    • Rafael,我的 git 子模块是私人公司代码 - 它们不能在 packagegist 上公开。
    • @PaulDragoonis 您不必在 packagist 上公开您的子模块即可与 composer 一起使用。您可以将其他包源(存储库)添加到您的 composer 配置中,例如 git 存储库、zip 文件或 satis 服务。查看关于存储库的作曲家文档here
    • 我同意这是最好的方法。您可以通过多种方式使用 Composer 使用“私有”代码。拉斐尔暗示了他们中的大多数。
    • Paul,Satis 是包装师的简化版。您所需要的只是确保带有 Satis 的服务器和您的开发/生产机器可以访问存储库。他们不会出现在 Packagist 上,但在你的项目中,你可以告诉作曲家去看看你的“自己的 packagegist”,我在我的公司也做过。 getcomposer.org/doc/articles/…
    • 感谢大家的回复!当我遇到第二个障碍时,我已经用我的回复编辑了上面的原始问题。
    【解决方案2】:

    您应该使用包含类似内容的 .gitignore 文件:

        web/bundles/
        app/cache/*
        app/logs/*
        app/sessions/*
        build/
        vendor
    

    在开发时,您应该不时启动php composer.phar update。验证您的工作后,您应该将 composer.lock 文件与您的开发一起提交。

    部署时,您只需启动php composer.phar install

    【讨论】:

    • 这并没有真正解决“具有自己的作曲家依赖项的 git 子模块”问题。
    【解决方案3】:

    我认为这听起来可能与您想要做的有点相似,所以我想我会发布链接以防万一您还没有看到它How do I use a Git submodule with a Composer loaded library?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2014-09-30
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      相关资源
      最近更新 更多