【问题标题】:git subtree or submodule for surrounding directories周围目录的 git 子树或子模块
【发布时间】:2014-04-28 02:49:39
【问题描述】:

我们通常从事与 CodeIgniter 共享类似目录结构的项目,其中有一个围绕我们的应用程序代码的框架(在父目录和同级目录中)。我们需要管理两个主要的工作流程:

  1. 在私有(非 github)存储库中维护我们的本地应用程序代码(例如 /application 目录)
  2. 从外部框架拉取上游变更,提交拉取请求等。

我在研究中发现的最接近的方法是使用fake submodules,加上少量.gitignore 或某种相关的巫术,但这似乎非常脆弱。有没有更好的方法来设置我们的存储库和目录?

【问题讨论】:

    标签: git git-submodules git-subtree


    【解决方案1】:

    更好的方法是按照优先顺序在(非假)子模块或子树的学习曲线上投入时间。您的评估是正确的-“假子模块”是一种过度简化的脆弱尝试,在琐碎的情况下就足够了,但不适用于许多项目和对分支、历史有不同想法的多个合作者以及子项目的发布管理。

    如果您确实想将所有内容视为一个巨大的项目,您可以查看 git subtree merges,但我建议您不要这样做,因为子模块特别适合管理具有不同发布时间表的第三部分依赖项。

    根据您的问题,我了解到您的设置看起来像这样,经过简化,

    parent-framework
    |-- application
    |-- framework
    `-- other-framework
    

    其中的框架(即frameworkother-framework 和可能的parent-framework)是在 github 上管理的独立项目。

    这就是我要做的,

    1. 在独立的私有存储库中管理 application 存储库
    2. 分叉框架
    3. parent-framework 级别或更高级别创建一个超级项目以将所有内容绑定在一起,其中所有框架(包括您的私有application 存储库)都是子模块。

    这将为您提供必要的灵活性,以管理您的application 开发线 SDLC(相对于第 3 方依赖框架的正交 SDLC)。

    另外请注意,最新版本的 git 使得递归推送(和更新)子模块变得非常容易,因此不必担心为框架创建拉取请求的复杂性。

    【讨论】:

    • 我有一半的预期是这样的。感谢您指出制作超级项目,这让它在我的脑海中点击。
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2020-03-14
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多