【问题标题】:How does Symfony manage Component sub-packages with Git and Composer?Symfony 如何使用 Git 和 Composer 管理组件子包?
【发布时间】:2015-11-01 19:47:49
【问题描述】:

我正在尝试弄清楚 Symfony 用于为每个 Symfony 组件(以及 Bridge 或 Bundle)创建单独包的工作流程,同时仍将它们全部包含在主 Symfony 框架中。

框架以及每个组件都有自己的 composer.json 文件:

Symfony
├── Component
|   ├── Component1
|   |   ├── ...
|   |   └── composer.json
|   ├── Component2
|   |   ├── ...
|   |   └── composer.json
|   └── ...
└── ...

我想以类似的方式创建一个项目。 Symfony 如何使用 Git 子树以这种方式跟踪框架和组件,以便它们可以单独安装或与 composer 一起安装?框架是否为每个包维护一个单独的存储库?这个过程是自动化的吗?手动更新所有组件包似乎需要做很多工作。

【问题讨论】:

    标签: php git symfony composer-php dependency-management


    【解决方案1】:

    Symfony 中的每个组件和包在 Github 上都有自己的存储库。它们仅用于 packagegist,因此它们是只读的。所有工作都在主存储库中进行。

    每次提交后,所有更改都将推送到只读存储库。据我所知,该脚本不公开,但您可以阅读一下 fabien 如何实现它here

    我还使用子树拆分将我的包分发到 jenkin 任务中的子存储库。

    这是一个小指南,用于将子树拆分添加到主存储库以及如何将其分发回其存储库。示例转移到您的目录结构示例,并且存储库的所有者是 Acme。

    创建组件

        #execute in subtree repository
        $ git init
        $ git commit -a -m "init"
        $ git remote add origin git@github.com:Acme/Component1.git
        $ git push -u origin master
    

    将组件添加到主存储库

        #execute in main repository
        $ git remote add -f Component1 git@github.com:Acme/Component1.git
        $ git subtree add --prefix Symfony/Component/Component1 --squash Component1/master
        $ git subtree push --prefix=Symfony/Component/Component1 Component1 master
    

    在主存储库中的更改后推送

        #execute in main repository on a webhook in e.g. jenkins
        $ git remote add -f Component1 git@github.com:Acme/Component1.git #only if you haven't add it before
        $ git subtree push --prefix=Symfony/Component/Component1 Component1 master
    

    希望这可能有助于设置您的基础架构。

    【讨论】:

    • 我可以使用 git sub tree 拆分 repo,并且还可以在 main 和 sub repo 中创建 composer.json。现在下一步怎么办?作曲家如何将代码从子仓库同步到主仓库?我应该将特定组件的更改推送到主仓库还是新创建的子仓库?请解释! @gseidel
    • 你好@appsntech。我的示例只是展示了如何将更改从主仓库推送到子仓库。这是单向的,也是最常见的方式。您应该在主存储库上进行所有更改,并且永远不要对子存储库进行更改。在主存储库中进行一些更改后,将更改推送到子存储库(请参阅示例“在主存储库中进行更改后推送”)。如果你想在其他项目中使用你的组件,你只需要 composer。因此,如果您有一个包含组件 B 的主仓库 A。而您的项目 C 需要组件 B。您使用 composer 来完成它。
    • 谢谢。我明白了。但在我的情况下,主存储库中已经包含许多文件夹。所以我只需要将每个文件夹拆分到一个子存储库并在主存储库中继续修改。我相信您的上述示例适用于从头开始创建组件的情况。你能告诉我一些要遵循的示例步骤或帮助我吗?提前致谢。
    • 好的。但我还有另一个问题。我的主要仓库可能是:```-example-unit1-unit2-docs-unit1-unit2-src-unit1-unit2-tests-unit1-unit2```问题是:如何创建子模块如下(unit1 subrepo) :```-示例-文档-src-测试```
    • 我一直在搜索和found this answer。我还没有测试过,但我认为它是。
    【解决方案2】:

    我不知道 Symfony 遵循的确切程序。

    但在实践中,可以遵循许多可能的不同路径。

    最简单的似乎是使用bash 脚本,就像提供的here 一样。

    或者您可能想要设置更复杂的流程,例如 the one set up for the Zend Framework

    另一种解决方案是使用 PHP 本身和 Composer,如 here 所述。

    这真的取决于你的需要。

    但我提供的链接应该是一个很好的起点,可以更好地了解如何建立良好的工作流程。

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 2015-04-25
      • 2013-03-14
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2016-12-02
      相关资源
      最近更新 更多