我遇到了以下问题:当我签出超级项目的特定提交并运行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)
答案 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
从现在开始就可以相应地更新子模块。