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.

怎么回事

在调查了删除所有内容并重试整个过程的情况后,我意识到子模块实际上是用分支开关更新的,因此不需要拉取并且响应 ( Already up-to-date.) 是正确的。

那为什么呢?

4

1 回答 1

1

说交换机更新了子模块是不太对的。当您运行时,子模块已更新git submodule update。子模块有点奇怪。正如这个页面所说:

...git submodule update从该项目中获取所有数据并检查您的超级项目中列出的相应提交:

因此,如果您运行git submodule udpate,即使您看到的版本不是最新的,您也已经拥有来自 repo 的所有更改。这是因为每个分支都有一个与之关联的特定提交。您看到的代码可能很旧,但子模块已经拥有所有最新数据。然后,当您git checkout master切换到可用的最新版本时,git pull什么也不做。

于 2013-02-26T17:57:20.640 回答