2013-02-26 58 views
1

我刚刚克隆了一个仓库,之前我从未使用过。它包含子模块,所以我也为什么更新分支更新子模块(没有明确的拉)?

~/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.)是正确的。

那么为什么呢?

回答

1

说交换机更新子模块并不完全正确。当您运行git submodule update时,子模块已更新。子模块有点奇怪。作为this page说:

... git submodule update从该项目获取的所有数据,并检查 出适当的在你的子项目会提交上市:

所以,如果你运行git submodule udpate,你已经有了即使您看到的版本不是最新版本,也可以从回购中进行所有更改。这是因为每个分支都有与之相关的特定提交。您看到的代码可能已旧,但子模块已经具有所有最新数据。然后,当你git checkout master你切换到可用的最新版本,并git pull不会做任何事情。