我对git子模块感到兴奋(一厢情愿?)我想出更具体的问题,这是个好兆头......
我试图在.gitmodules
和.git/config
中找到超级项目引用的子模块的哪个版本,但是没有提到任何内容......
方案是我正在更改其根目录中的子模块(从中导入它们),然后将它们拉到“子模块化”的位置... ...
除了从超级项目提交以将这些更改合并到超级项目仓库之外,我是否还需要执行“git update
”来注册新的拉入式子模块提交?
基本上问题是:
只有当我第一次克隆超级项目时,或者每次拉动子模块(来自它自己的回购)后,我才需要“
git submodule update
”吗?
谢谢
答案 0 :(得分:19)
正如我之前对git submodule update
的回答所述,该命令会根据.gitmodules
文件检出项目的特定版本。
这是子模块的一个重点:您将它们记录为它们所处的确切提交。
您可以通过在“超级项目”(引用一个或多个子模块的那个)中运行来查看引用了哪个提交:
git submodule status
(除非您在该子模块中直接提交了一些内容,但在瘦身情况下,它会在+
的{{1}}前面显示“SHA-1
”从超级项目中存储的HEAD
推进的任何子模块或SHA-1
在模式“160000”中查找条目,这是Git索引中的一个特殊条目。这意味着,每次在“超级项目”中执行git命令时,都可以修改子模块提交SHA1,你需要一个“git ls-files --stage
”。
只有在我第一次克隆超级项目时,或者每次拉动子模块(来自它自己的仓库)之后,我才需要“git submodule update”吗?
是的,每次下拉主项目中的子模块更改时都必须这样做 那是因为你引用了子模块原始repo所处的确切提交(如上所述),当你拉回那个repo时,你正在有效地修改那个提交。