1

所以我们有我们的template_site

这基本上是我们构建的任何网站的前端基础。

我们有我们的cms

这是站点的后端并且驻留在template_site/cms它自己的存储库中,因为我们经常使用它而不使用template_site

我们有我们的模块,其中包含驻留的文件

template_site/(all over the place)cms/modules/(name of module)

本质上,我们想要的是在它自己的 repo 中 拥有 The
在它自己的 repo 中。然后对于我们创建的每个模块,都将其作为另一个存储库的分支。但是我们只希望该存储库包含特定于模块的文件和对文件的更改,以便我们可以将模块拉入现有项目并让它只影响那些文件。cms
template_sitecms_modules

问题是基本上所有部分都是链接的,但是我们希望能够在处理模块时拉入对 的任何更改template_site,并拉入对cms

这种设置的原因是,对于我们创建的每个站点,我们都希望将其克隆template_site到它自己的存储库中,然后我们可以根据需要对其进行自定义。

我们应该怎么做?

或者这种设置有更好的工作流程吗?

我可以看到的适当设置是:

cms_modules存储库作为“超级项目”
让主分支中没有模块。
添加cms为子模块
添加template_site为子模块

这样我们就可以将 repo 克隆到它自己的存储库中并解决它,并且仅在需要cms_modules时才初始化子模块。template_site但是我在这里可以看到的唯一问题是我们希望cms_modules副本(对于新站点)或分支(对于新模块)跟踪其根目录中的任何新文件,但也跟踪子模块内的任何更改或新文件,而不是他们各自的存储库会跟踪它们。

然后,如果存储库有更新,template_site我们cms可以 cd 进入它们各自的目录并发布更新,但同样我们希望将我们更改的任何文件的合并跟踪到存储cms_modules库而不是相应的子模块。

如果我们想添加另一个模块,我们可以合并到该模块的分支中。

我们怎么能设置它?

4

1 回答 1

0

存储库结构: git submodules似乎最适合您使用不受您控制的外部存储库的情况。这个想法是您正在当前存储库中移植不同的存储库,但部分技巧是外部存储库中分支的状态将包含子模块“当前版本”的提交哈希。换句话说,如果没有对外部树的额外提交,外部树将不会在内部树中显示进度。这对于外部案例很有意义——我不希望我的构建由于我使用的库中的开发而被破坏——但在你的案例中似乎有很多簿记。

如果您要为每个站点创建一个全新的存储库,那么子模块的更直观的用法是,然后拥有cms一个适当的子模块。这样,每个站点都可以与 CMS 文件夹的不同快照进行交互,并且您只有在准备好时才推出新版本。

存储库数量:因为您的数据实际上在您的控制之下,所以拥有一个存储库对我来说是最有意义的。例如,如果其中一个目录足够大(以兆字节为单位),或者如果您的一部分同事只能访问其中一个或另一个,那么您可以为单独的存储库提出一个很好的论据,但除此之外,保留几乎没有优势存储库部分分开。

Branch per module: I tend to agree with the Stack Overflow answer here that recommends against putting entirely different content in each branch. In that condition, unless you create merge commits automatically or frequently, there will be no single branch that contains multiple modules (or all of your modules). There's nothing in git that prevents it from working that way, but it's atypical.

My preferred branch structure: Create a master branch that contains all modules and all sites. You can still create a branch per module or site to ease development, but once the code looks good, merge the branch into the master. Haven't touched a module in a while? Delete the branch--you can always recreate it later.

Hope that helps!

于 2012-09-19T00:03:16.573 回答