为什么切换更新子模块(没有显式拉)?

时间:2013-02-26 17:31:43

标签: git git-submodules

我刚刚克隆了一个存储库,我以前从未工作过。它包含子模块,所以我做了

~/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>

那为什么呢?

1 个答案:

答案 0 :(得分:1)

说开关更新了子模块是不对的。运行git submodule update时子模块已更新。子模块有点奇怪。正如this page所说:

  

... git submodule update从该项目中获取所有数据并进行检查   超出你的超级项目中列出的适当提交:

因此,如果您运行git submodule udpate,您已经拥有了回购的所有更改,即使您看到的版本不是最新版本。这是因为每个分支都有一个与之关联的特定提交。您看到的代码可能很旧,但子模块已经包含所有最新数据。然后,当您git checkout master切换到可用的最新版本时,git pull无法执行任何操作。