最初只需要git子模块更新吗?

时间:2010-01-02 16:17:53

标签: git-submodules

我对git子模块感到兴奋(一厢情愿?)我想出更具体的问题,这是个好兆头......

我试图在.gitmodules.git/config中找到超级项目引用的子模块的哪个版本,但是没有提到任何内容......
方案是我正在更改其根目录中的子模块(从中导入它们),然后将它们拉到“子模块化”的位置... ... 除了从超级项目提交以将这些更改合并到超级项目仓库之外,我是否还需要执行“git update”来注册新的拉入式子模块提交?

基本上问题是:

  

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

谢谢

1 个答案:

答案 0 :(得分:19)

正如我之前对git submodule update的回答所述,该命令会根据.gitmodules文件检出项目的特定版本。

GitPro page does insist

  

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

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

  • git submodule status(除非您在该子模块中直接提交了一些内容,但在瘦身情况下,它会在+的{​​{1}}前面显示“SHA-1”从超级项目中存储的HEAD推进的任何子模块或
  • SHA-1在模式“160000”中查找条目,这是Git索引中的一个特殊条目。

这意味着,每次在“超级项目”中执行git命令时,都可以修改子模块提交SHA1,你需要一个“git ls-files --stage”。

  

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

是的,每次下拉主项目中的子模块更改时都必须这样做 那是因为你引用了子模块原始repo所处的确切提交(如上所述),当你拉回那个repo时,你正在有效地修改那个提交。