多模块(主题)的推荐工作流程

3

我有一个应用(cms),其结构如下:

BASE:
    /application/
    /public/
        themes/
           default/
           mobile/

这是我们所有项目的基础中央存储库。然后每个项目都有自己的皮肤:(这些皮肤基于/default/主题)

CLONE1:
    /application/
    /public/
        themes/
           default/
           mobile/
           own/
           ...
           own-theme-12/

这个应用有12个自定义主题,基于默认主题。

整个过程涉及应用程序的维护和确保所有克隆版本都与基础版本同步更新。

现在,我们将基础版本添加为远程仓库:

(/clone1/)$ git remote add base-repo /path/to/base.git

需要时,请拉取更新:

(/clone1/)$ git pull base-repo develop

当在/application中修改.php文件时,一切工作正常。当我们修改BASE仓库中default主题中的文件(例如,在reset.css中打错字)时,问题就开始了。我们需要将这些更改应用于CLONE1/default主题以及所有的CLONEx/own-x/主题。
当然,需要一些bash脚本来告诉它去哪里复制和提交更改,但如何在不产生合并冲突的情况下保持整个过程同步?
我们使用git flow。目前defaultmobile主题尚未分别在单独的分支中。我们需要将它们放入分支中吗?我们现在还没有使用子模块。
有许多方法可以组织这个工作流程,但您选择哪种最优的方法?

类似问题:https://dev59.com/yE7Sa4cB1Zd3GeqP8f5O - takeshin
2个回答

2
您可以使用 git-subtree 来解决此类问题。基本上,您正在构建一个基于上游应用程序的自定义应用程序,您的自定义应用程序具有两种更改:应用程序修复和特殊主题。您想将应用程序修复发送到上游,但不想将您的特殊主题发送到上游。
如果您在顶层创建两个子树:一个用于上游应用程序,另一个用于主题,则可以使用 git-subtree 拆分/合并它们。从上游继承的主题可以从应用程序目录链接到主题目录。因此,您得到类似于以下内容的内容:
    /app/code/*.php
    /app/themes/default/
    /app/themes/mobile/
    /themes/default -> ../app/themes/default
    /themes/mobile -> ../app/themes/mobile
    /themes/own-1/

当您想将应用程序更改发送到上游时,可以执行以下操作:
    git subtree split --prefix=app --rejoin

1
考虑到应用程序需要这些主题目录才能正常运行,它们应该保留为目录,而不是分支。
您不能将多个分支部署到生产环境中(您只能从一个分支或另一个分支选择版本,而不能全部选择)。您可以部署多个目录,使应用程序在没有任何关于SCM的知识的情况下运行。
对于其余部分,作为合并驱动程序执行的脚本可以:
  • BASE/default的内容合并到local/default
  • 检查是否存在相同的文件(例如reset.css)在其他目录中,并开始报告相同的演变。
我没有关于确切机制的具体信息,但我怀疑合并驱动程序是传播更改的良好入口点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接