我刚刚克隆了一个存储库,我以前从未工作过。它包含子模块,所以我做了
~/projects/myProject (master) $ git submodule init
~/projects/myProject (master) $ git submodule update
由于我需要更新版本的子模块,我尝试通过以下方式进行更新:
~/projects/myProject (master) $ cd subs/mySubmodule
~/projects/myProject/subs/mySubmodule ((no branch)) $ git checkout master
~/projects/myProject/subs/mySubmodule (master) $ git pull
得到了
Already up-to-date.
WTF
通过删除所有内容并重试整个事情来调查情况之后,我意识到子模块实际上是使用分支交换机更新的,并且没有必要提取并且响应(Already up-to-date.
)是正确的。 / p>
那为什么呢?
答案 0 :(得分:1)
说开关更新了子模块是不对的。运行git submodule update
时子模块已更新。子模块有点奇怪。正如this page所说:
...
git submodule update
从该项目中获取所有数据并进行检查 超出你的超级项目中列出的适当提交:
因此,如果您运行git submodule udpate
,您已经拥有了回购的所有更改,即使您看到的版本不是最新版本。这是因为每个分支都有一个与之关联的特定提交。您看到的代码可能很旧,但子模块已经包含所有最新数据。然后,当您git checkout master
切换到可用的最新版本时,git pull
无法执行任何操作。