【问题标题】:git submodule update needed only initially?git submodule update 只需要最初?
【发布时间】:2010-12-31 19:28:20
【问题描述】:

我对 git submodule 有了一些了解(一厢情愿?),我想出了更具体的问题,这是一个好兆头......

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

基本上问题是:

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

谢谢

【问题讨论】:

标签: git-submodules


【解决方案1】:

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

GitPro page does insist:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 2013-11-06
    • 2021-07-31
    • 2018-01-31
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2014-03-18
    • 2021-06-30
    相关资源
    最近更新 更多