【问题标题】:include directory of git repository into own with full functionality将 git 存储库的目录包含到拥有完整功能的自己的目录中
【发布时间】:2017-01-14 13:00:27
【问题描述】:

我们最近决定从我们的主项目中拆分一个子项目 foo。我们不想包含所有的 foo,例如所有与 foo 相关的测试都可以安全地保存在 foo/ 中。

现在,我有两个存储库:

main/
   include/folder1
   include/foo/
   Test/

foo/
    include/...
    Test/...

我想用 foo/include 替换 main/include/foo。这可以使用git subtree split。问题是这会重写历史,我不确定如何将 main/include/foo 的更改推送到 /foo/include。 git subtree push -P include/foo/ foo 给出了可怕的结果。

有人知道怎么做吗?

【问题讨论】:

    标签: git git-subtree


    【解决方案1】:

    您应该像以前一样使用 git subtree split ... 进行拆分,但如果您希望它位于单独的存储库中,请使用 git submodule 将其作为内部存储库管理在单独的存储库下。

    Submodules 始终允许将外部存储库嵌入到源代码树的专用子目录中指向一个特定的提交。


    git submodule

    像您目前所做的那样,将您的大项目分解为子项目。
    现在将每个子项目添加到您的主项目中:

    git submodule add <url>
    

    将投影添加到您的存储库后,您必须初始化并更新它。

    git submodule init
    git submodule update
    

    这是子模块的图示 - 另一个项目中的项目,其中每个项目都是一个独立的项目。


    git subtree

    Git 子树允许您插入任何存储库作为另一个存储库的子目录

    submodule 非常相似,但主要区别在于代码的管理位置。在子模块中,内容被放置在一个单独的 repo 中并在那里进行管理,这允许您将其克隆到许多其他 repo。

    subtree 将内容作为根项目的一部分进行管理,而不是在单独的项目中。

    您无需写下如何设置它以及了解如何使用它,您只需阅读这篇将解释一切的优秀文章。

    https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

    【讨论】:

    • 您好,感谢您的回答。不幸的是,据我所知,它并没有完全回答我的问题。您也可以使用 git subtree 执行您所描述的操作(将外部存储库添加到给定路径的存储库)。问题是我想将外部存储库的文件夹绑定到我的存储库的文件夹。因此,例如,我不想包含 foo 的测试,而只需要包含。(如果我也想要 foo/tests,我宁愿将它们绑定到 main/Test/foo)
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多