跳转到内容

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 档案就会成为一个子模块


工作流程

[编辑 | 编辑源代码]

超级项目和子模块的工作流程通常应遵循以下步骤

  1. 在子模块中进行更改
  2. git commit 在子模块中进行更改
  3. git commit 在超级项目中进行更改
  4. git submodule update 将更改推送到早于超级项目的各个存储库。
  1. ^ 嗯,那并不完全正确,Git 从 v1.5.3 开始支持这一点,但官方的瓷器(porcelain)并不支持。你可以git init一个父目录,并创建你自己的“.gitmodules”,然后接着进行git submodule init。一般来说,瓷器(porcelain)未涵盖的内容超出了本书的范围。
华夏公益教科书