git submodule update只需要在初始时执行吗?

14

我对git子模块有了一些了解(或许是一厢情愿?),并且我正在想出更具体的问题,这是个好兆头...

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

基本上问题是:

我是否只需要在第一次克隆超级项目时执行"git submodule update",还是每次从其自己的存储库中拉取子模块后都需要执行?

谢谢


抱歉回复晚了,我没有看到你之前的问题后面有新的提问(https://dev59.com/mXI-5IYBdhLWcg3wMFMf)。 - VonC
1个回答

28
如我在之前回答 git submodule update 中所提到的,该命令会根据 .gitmodules 文件检出项目的特定版本。 GitPro 页面强调了这一点: “对于子模块而言,这是一个重要的点:你需要将它们记录为确切的提交。” 您可以在 “超级项目”(引用了一个或多个子模块的项目)中运行以下命令来查看引用的提交:
  • git submodule status(除非您在子模块内部进行了某些提交,在这种情况下,它将在任何子模块的 HEAD SHA-1 的前面显示一个“+”,表示已超过 superproject 中存储的 SHA-1)或
  • git ls-files --stage 寻找模式为 “160000” 的条目,这是 Git 索引中的特殊条目。
这意味着,每次您在“超级项目”中执行可能修改该子模块提交 SHA1 的 git 命令时,都需要运行 “git submodule update” 命令。

我仅需要在首次克隆超级项目时,或每次从子模块(来自其自己的仓库)拉取后都要执行 “git submodule update” 命令吗?

是的,您每次在主项目中拉取子模块更改时都需要执行这个命令,因为您正在引用子模块原始仓库所在的确切提交。当您拉取该仓库时,实际上正在修改该提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接