【问题标题】:Git submodule or sub-repository or remote?Git子模块或子存储库或远程?
【发布时间】:2011-07-23 04:30:54
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: git module code-organization project-organization


    【解决方案1】:

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

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

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

    【讨论】:

    • 好吧,我已经阅读了 git help 子模块,他们说:“不要将它们与遥控器混淆,遥控器主要用于同一项目的分支;子模块适用于您的不同项目想成为你的源代码树的一部分,而两个项目的历史仍然完全独立,你不能从主项目中修改子模块的内容。” ...在我的情况下,我想修改客户端项目中的子模块,以防我需要个性化插件。现在你告诉我我们可以修改子模块?
    • 是的。修改客户端的插件代码,提交并推送更改到(2),然后去客户端的CMS代码,提交并推送插件的更改(更新SHA哈希)到(1)。
    • 好的,听起来不错,但我还有一个关于文件夹组织/结构的补充问题:stackoverflow.com/questions/5461617/…
    【解决方案2】:

    关于上一个答案的简短更新/附加信息:如果您不喜欢git submodules 的方法或认为这太难以理解,您可以尝试

    不要忘记检查是否可以使用其他依赖管理器(例如 RubyGems 用于 Ruby,Composer 用于 PHP...)而不是子模块,它会更易于使用和维护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2015-09-25
      • 2012-09-20
      相关资源
      最近更新 更多