`git submodule update`没有检查子模块

时间:2017-05-23 11:35:32

标签: git

我遇到了以下问题:当我签出超级项目的特定提交并运行git update submodules时,子模块的提交不会被检出,尽管这就是这个命令应根据联机帮助页,互联网博客帖子等进行。我仍然需要手动运行git submodule <path/to/submodule>来检查正确的提交。

有谁知道我能做什么让git表现得那样?我使用git version 2.11.0

工作树很干净。

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git status
HEAD detached at origin/master
nothing to commit, working tree clean

检出子模块problematic_submodule的正确提交。 (其行不以+ / -为前缀。)

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule
+321fce0da25208bf886d85ce4a2f1cefc02bbfff modules/libgksl (v1.2-9-g321fce0)
 ... some other modules ...
 9acb4a5d28d1ac785fce17799d58e21cc437b77d modules/problematic_submodule (v0.19-3355-g9acb4a5d2)

我签出了尚未推送的超级项目的本地主人:

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git checkout master
Previous HEAD position was 4b58c94... Merge branch 'dev' into 'master'
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

现在我想更新子模块,以便他们检查出正确的提交:

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule update --recursive
Fetched in submodule path 'modules/libgksl', but it did not contain a20f22f989afbcbb620303a6b418de8093c71259. Direct fetching of that commit failed.

唉,problematic_submodule仍然是错误的提交。 (请注意,该行的前缀为+。)

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule
+321fce0da25208bf886d85ce4a2f1cefc02bbfff modules/libgksl (v1.2-9-g321fce0)
 ... some other modules ...
+9acb4a5d28d1ac785fce17799d58e21cc437b77d modules/problematic_submodule (v0.19-3355-g9acb4a5d2)

我必须指定problematic_submodule才能检出:

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule update modules/problematic_submodule/
Submodule path 'modules/problematic_submodule': checked out '24b46f28edf9c75bf8a7bcf4cac7aa65564c88c9'

现在只检查problematic_submodule的正确提交。 (该行不再以+为前缀。)

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule
+321fce0da25208bf886d85ce4a2f1cefc02bbfff modules/libgksl (v1.2-9-g321fce0)
 ... some other modules
 24b46f28edf9c75bf8a7bcf4cac7aa65564c88c9 modules/problematic_submodule (v0.19-3551-g24b46f28e)

1 个答案:

答案 0 :(得分:0)

git submodule update未能检查子模块problematic_submodule中的正确提交的原因似乎是在无法检出子模块libgksl的所需提交时中止了。

manuel@manuelthinkpad:~/projects/testcompile/superproject$ git submodule update --recursive
Fetched in submodule path 'modules/libgksl', but it did not contain a20f22f989afbcbb620303a6b418de8093c71259. Direct fetching of that commit failed.

显然,这停止了整个子模块更新操作。

我能够通过以下步骤解决我的问题:

1。 更改为modules/libgksl并签出现有提交。

2。 回到超级项目git add modules/libgksl,并提交。

现在超级项目再次处于健康状态。当我更改子模块的签出提交并通过添加和提交将其SHA1存储在超级项目中时,git submodule update从现在开始就可以相应地更新子模块。