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

时间:2011-01-18 10:22:18

标签: git workflow git-branch git-submodules branching-and-merging

我有一个app(cms)结构是这样的:

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

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

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

(此应用有12个基于默认主题的自定义主题。)

整个过程是关于维护应用程序并使所有CLONES与BASE保持同步。

现在,我们将BASE添加为远程仓库:

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

然后在需要时提取更新:

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

当修改.php中的/application个文件时,一切都很有效。当我们在BASE repo中修改default主题中的文件时(例如reset.css中的拼写错误),问题就开始了。我们需要CLONE1/default主题和所有CLONEx/own-x/主题中的这些更改。

当然需要一些bash脚本来告诉复制和提交更改的位置,但如何在没有合并冲突的情况下保持整个事物的同步?

我们使用git flowdefaultmobile主题目前不在单独的分支中。我们需要他们吗?我们还没有使用子模块。

有很多方法可以组织这个工作流程,但您会选择哪种方式作为最佳工作流程?

2 个答案:

答案 0 :(得分:2)

您可以使用git-subtree来解决此类问题。基本上,您正在做的是基于上游应用程序构建自定义应用程序,并且您的自定义应用程序有两种更改:应用程序修复和特殊主题。您希望获取应用程序修复程序并将其发送到上游,但您不希望向上游发送特殊主题。

如果你在顶层创建了两个子树:一个用于你的上游应用,一个用于你的主题,你可以用git-subtree分割/加入它们。从上游继承的主题可以从app目录符号链接到主题目录。所以你得到这样的东西:

    /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 :(得分:1)

考虑到应用程序需要这些主题目录才能运行,它们应该保存为目录,而不是分支。
您无法将多个分支部署到生产中(您从一个分支或另一个分支中选择版本,而不是所有分支)。您可以部署多个目录,允许应用程序在不了解SCM的情况下运行。

对于其余部分,以 merge driver 执行的脚本可以:

  • BASE/default的内容合并到local/default
  • 检查同一文件(如reset.css是否存在于其他目录中,并开始在其上报告相同的演变)。

我没有关于确切机制的具体信息,但我怀疑合并驱动程序是传播更改的良好切入点。