Git子模块或子存储库还是远程?

FMa*_*008 25 git module code-organization project-organization

我正在使用GIT来管理内容管理系统(CMS)项目.CMS可以有多个插件(模块).

所以基本上,我想拥有3种类型的存储库:

  • 核心CMS开发(每个新项目都是最后一个稳定和未配置版本的结帐)
  • 每个模块/插件1个存储库.(每个新项目都会检查他们想要实现的模块的最后一个稳定版本)
  • 每个项目1个存储库(每个客户端将是一个存储库,代表来自核心CMS和模块的个性化)

对于类型1和类型2,我猜它是简单的基本存储库.但当涉及到客户项目时,我感到困惑:

  • 首先,我将克隆CMS,然后进入/ modules /文件夹并再次克隆所有必需的模块?这将在存储库中创建一个存储库!第一个repo会尝试记录每个模块的.git /文件夹吗?
  • 我无法使用子模块,因为每个客户端都需要对其模块进行个性化.
  • 如果我修改模块的核心组件(不是个性化,只是修复错误),我可以将该单个文件推送到原始模块存储库吗?
  • (不是说会传播到周围的模块unitTest)

所以问题是:我应该如何组织存储库/文件/文件夹以提高效率?

Joh*_*hat 13

你所描述的布局对git子模块非常有效.我会温和地推荐阅读文档并尝试一些教程.您的计划引入的主要区别是每个客户端存储库和客户端插件存储库将具有两个远程控制器而不是一个.而且,当您想要启动一个新的客户项目时,您将需要

  1. 叉主线cms
  2. fork所有将被修改的插件
  3. 从(1)克隆分叉的cms,更新其子模块以指向(2)的新遥控器
  4. 初始化/更新子模块
  5. (可选)将主线cms URL作为远程添加到客户端的分叉cms中
  6. (可选)在主客户端的分叉插件中添加主线插件URL作为遥控器

更好的选择可能是使用相同的存储库,只需为每个客户端创建一个分支.这就是我要做的.


小智 8

简短的更新/有关先前答案的其他信息:如果您不喜欢git submodules这种方法或认为这太难理解了,可以尝试

不要忘了检查是否可以使用其他依赖关系管理器(例如Ruby的RubyGems,PHP的Composer ...)代替子模块,这将更易于使用和维护。