Git中子项目和子模块之间的区别?

64 git

在Git中,"子模块"(由git子模块命令创建和管理)与"子项目"(实际上只是放在另一个Git存储库中的一个Git存储库)之间存在差异,如果是,那么它是什么?

我能够找到的关于此的所有文档都相当模糊(在某些情况下,相互矛盾).我怀疑是没有区别,但我认为我应该确认这一点,并为Git新手找一个问题.

Jus*_*ᚄᚒᚔ 83

一个子项目是三种类型的嵌套的一个通用术语:

  • 子模块提供从超级项目到子项目的半固定引用,并集成到git中.最好在子项目中使用:
    • 由其他人开发,不受超级项目的管理控制,并遵循不同的发布周期.
    • 包含超级项目之间共享的代码(特别是当意图将错误修正和新功能传播回其他超级项目时).
    • 分离巨大的和/或许多会损害日常git命令性能的文件.
  • 子树导致子项目存储库被导入到超级项目的存储库中,成为具有完整历史记录的存储库的本机部分,通常位于超级项目的特定子目录中.
  • Wrappers,为具有关联子项目的超级项目提供多存储库管理功能.

参考文档

  • 这是一个很好的描述.看看Subtrees和Wrappers的"子项目最佳使用......"部分会很有用. (12认同)
  • @Justin,如何知道使用哪种类型的组件的git存储库?任何git命令都能做到吗? (2认同)