我有一个结构如下的应用程序 (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
然后在需要时 pull 更新:
(/clone1/)$ git pull base-repo develop
当 /application
中的 .php
文件被修改时,一切正常。当我们在 BASE repo 中修改 default
主题中的文件时,问题就开始了(例如 reset.css
中的拼写错误)。我们需要在 CLONE1/default
主题和所有 CLOEx/own-x/
主题中进行这些更改。
当然需要一些 bash 脚本来告诉在哪里复制和提交更改,但是如何在没有 merge 冲突的情况下保持整个事情同步?
我们使用git flow
。 default
和 mobile
主题现在不在单独的分支中。我们需要他们吗?我们还没有使用子模块。
组织此工作流程的方式有很多种,但您会选择哪种方式最合适?
最佳答案
您可以使用 git-subtree帮助解决这类问题。基本上,您正在做的是基于上游应用程序构建自定义应用程序,您的自定义应用程序有两种更改:应用程序修复和特殊主题。您想要获取应用程序修复并将它们发送到上游,但您不想将您的特殊主题发送到上游。
如果您在顶层创建两个子树:一个用于您的上游应用程序,一个用于您的主题,然后您可以使用 git-subtree 拆分/merge 它们。从上游继承的主题可以从 app 目录符号链接(symbolic link)到 themes 目录。所以你得到这样的东西:
/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
关于git - 多个模块(主题)的推荐工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4722921/