12

我掌握了 git submodule 的窍门(一厢情愿?),我想出了更具体的问题,这是一个好兆头......

我试图在 和 中找到超级项目引用的子模块的哪个修订版.gitmodules.git/config但那里没有提到任何内容...
场景是我正在更改子模块的根位置(从中导入它们),然后将它们拉到它们“子模块”的位置......
除了从超级项目提交以将这些更改合并到超级项目存储库中,我还需要做“ git update”来注册新拉入的子模块提交吗?

基本上问题是:

git submodule update只有当我第一次克隆超级项目时,或者每次拉出子模块(从它自己的仓库)之后,我才 需要“ ”吗?

谢谢

4

1 回答 1

24

正如我之前对 的回答中提到的,该命令根据他们的文件git submodule update检查项目的特定版本。.gitmodules

GitPro页面确实坚持

这是子模块的重要一点:您将它们记录为它们所在的确切提交。

您可以通过在“超级项目”(引用一个或多个子模块的那个)中运行来查看引用了哪个提交:

  • git submodule status(除非您直接在该子模块中进行了一些提交,否则它会在从超级项目中存储的任何子模块的前面显示一个“ ” +)或SHA-1HEADSHA-1
  • git ls-files --stage在模式“160000”中寻找条目,这是 Git 索引中的一个特殊条目。

这意味着,每次您在“超级项目”中执行可以修改该子模块提交 SHA1 的 git 命令时,您都需要一个“ git submodule update”。

只有当我第一次克隆超级项目时,或者每次拉出子模块(从它自己的仓库)之后,我才需要“git submodule update”吗?

是的,每次在主项目中拉下子模块更改时,您都必须这样做。
那是因为您引用了子模块原始存储库所在的确切提交(如上所述),并且当您提取该存储库时,您实际上是在修改该提交。

于 2010-02-09T08:05:52.060 回答