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

标签 git module code-organization project-organization

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

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

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

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

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

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

最佳答案

您所描述的布局将非常适合 git 子模块。我建议您阅读 docs并尝试一些 tutorials .您的计划引入的主要区别是每个客户端存储库和客户端插件存储库将有两个 Remote 而不是一个。而且,当您想开始一个新的客户项目时,您需要

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

更好的选择可能是使用相同的存储库并简单地为每个客户端创建一个分支。我就是这样做的。

关于Git 子模块或子存储库或远程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5437460/

相关文章:

opencv - 如何找到 facemark-> OpenCV_Contrib 加载模型的模型文件?

php - 用一堆 $_POST 组织一个 PHP 页面

vue.js - 如何在一个模块内从另一个模块使用 getter 进行 Vuex 状态

Python:没有类的模块中的持久变量?

java - 使用 JGit 创建一个从属性克隆存储库的工具

git - 为什么用现在时来描述 git 提交被认为是好的做法?

java - 用于折叠/展开方法的 NetBeans 快捷键

html - 在 CSS 中使用类的正确方法是什么?

git - 如何使用 zsh compinit 启用 git 文件选项卡补全?

git - 如何删除使用递归 .../** 模式 .gitignored 的文件?