Git/子模块和超级项目
外观
< Git
超级项目是 Git 的一个新功能,已经开发了很长时间。它解决了对多个 Git 存储库进行更好控制的需求。超级项目功能的瓷器(porcelain)相当新,最近才在 Git v1.5.3 中发布。
一个 Git 超级项目可能包含一组Git 存储库,每个存储库都称为子模块。你可以将子模块看作子项目,超级项目看作超级模块。为什么这两个术语在没有其替代方案的情况下会带有子或超前缀,确实没有太大意义;不过,这就是官方 Git 文档对它们的称呼方式。
唯一专门用于子模块/超级项目功能的 Git 应用程序是git-submodule。
超级项目只是一个 Git 存储库。要创建一个超级项目,只需对任何目录进行git init操作,并git submodule add你想要包含的所有 Git 档案。补充一点,你目前无法git submodule add位于同一目录下的直接子目录的 Git 存储库。[1]
最终的结构将类似于以下内容
|- superproject |- submodule (git archive) [a] |- submodule [b] |- submodule [c] |- submodule [d]
当有人拉取超级项目时,他们将看到每个子模块的一系列空文件夹。然后,他们可以git submodule init他们想要使用的所有子模块。
当你在另一个 Git 存储库中执行git submodule add操作后,一个Git 档案就会成为一个子模块。
超级项目和子模块的工作流程通常应遵循以下步骤
- 在子模块中进行更改
- git commit 在子模块中进行更改
- git commit 在超级项目中进行更改
- git submodule update 将更改推送到早于超级项目的各个存储库。
- ^ 嗯,那并不完全正确,Git 从 v1.5.3 开始支持这一点,但官方的瓷器(porcelain)并不支持。你可以git init一个父目录,并创建你自己的“.gitmodules”,然后接着进行git submodule init。一般来说,瓷器(porcelain)未涵盖的内容超出了本书的范围。