3

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

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

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

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

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

整个事情是关于维护应用程序并使所有克隆与 BASE 保持同步。

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

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

然后在需要时拉取更新:

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

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

当然,需要一些 bash 脚本来告诉在哪里复制和提交更改,但是如何在不发生合并冲突的情况下使整个事情保持同步呢?

我们使用git flow. 和主题现在不在单独的分支中defaultmobile我们需要他们吗?我们还没有使用子模块。

组织此工作流程的方法有很多种,但您会选择哪一种作为最佳方法?

4

2 回答 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
于 2011-02-25T12:08:33.893 回答
1

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

其余的,作为合并驱动程序执行的脚本可以:

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

我没有关于确切机制的细节,但我怀疑合并驱动程序是传播更改的一个很好的入口点。

于 2011-01-18T13:34:22.397 回答