Symfony是如何用Git和Composer管理Component子包的



我试图找出Symfony用于为每个Symfony组件(和桥或包)创建单独的包的工作流程,同时仍然将它们全部包含在主Symfony框架中。

框架和每个组件都有自己的编写器。json文件:

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

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

Symfony中的每个组件和bundle在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

将组件添加到主存储库

    #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

希望可以帮助您建立基础设施。

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

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

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

或者您想要设置一个更复杂的流,就像为Zend框架设置的那样。

另一个解决方案是使用PHP本身和Composer,就像这里描述的。

这完全取决于你的需要。

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

最新更新