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


71

在Git中,“子模块”(由git submodule命令创建和管理)和“子项目”(实际上只是一个Git存储库放在另一个Git存储库中)之间是有区别的,如果有的话,它是什么? ?

我能够找到的所有文档都比较模棱两可(在某些情况下是矛盾的)。我的怀疑是没有区别,但是我认为我应该确认这一点,并为Git新手找到一个问题。

git 

Answers:


94

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

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

参考文件


13
这是一个很好的描述。查看子树和包装程序的“子项目...时使用最佳”部分将很有用。
greggles

2
@Justin,如何知道使用哪种类型的组件的git存储库?任何git命令都能做到吗?
肖恩

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.