Symfony如何使用Git和Composer管理Component子包?

Cy *_*nol 3 php git dependency-management symfony composer-php

我试图找出Symfony用于为每个Symfony组件(和Bridge或Bundle)创建单独的包的工作流,同时仍将它们全部包含在主Symfony Framework中.

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

Symfony
??? Component
|   ??? Component1
|   |   ??? ...
|   |   ??? composer.json
|   ??? Component2
|   |   ??? ...
|   |   ??? composer.json
|   ??? ...
??? ...
Run Code Online (Sandbox Code Playgroud)

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

小智 7

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

每次提交后,所有更改都将推送到只读存储库.我所知道的剧本并不公开,但你可以在这里看一下fabien如何实现它

我还使用子树拆分将我的包分发到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
Run Code Online (Sandbox Code Playgroud)

将组件添加到主存储库

    #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
Run Code Online (Sandbox Code Playgroud)

在主存储库中更改后推送

    #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
Run Code Online (Sandbox Code Playgroud)

希望这可能有助于建立您的基础设施.