我有一个包含三个子模块的git存储库。包含的存储库有两个分支master
和develop
。所有子模块只有一个分支-- master
分支。
当包含的存储库在主分支上时,通过git push --recurse-submodules=on-demand
推送到源的工作方式是预期的。包含项目及其子模块都会被推送。
现在问题来了。当包含的存储库在develop
分支上时,我在通过git push --recurse-submodules=on-demand
推送时遇到问题。取消推送操作并打印错误消息。
下面是我从git得到的完整输出:
$ git push --recurse-submodules=on-demand
fatal: src refspec 'refs/heads/develop' must name a ref
fatal: process for submodule 'Frameworks/OpenLearnWareClient' failed
我可以通过首先手动推送每个子模块中的更改,然后推送包含的存储库来缓解这个问题。然而,这非常单调乏味,并且违背了--recurse-submodules=on-demand
的目的。
这是我的.gitmodules
文件:
[submodule "Frameworks/OpenLearnWareKit"]
path = Frameworks/OpenLearnWareKit
url = git@github.com:kaiengelhardt/OpenLearnWareKit.git
branch = master
[submodule "Frameworks/OpenLearnWareClient"]
path = Frameworks/OpenLearnWareClient
url = git@github.com:kaiengelhardt/OpenLearnWareClient.git
branch = master
[submodule "Frameworks/KEFoundation"]
path = Frameworks/KEFoundation
url = git@github.com:kaiengelhardt/KEFoundation.git
branch = master
我使用的是git版本2.20.1 (Apple Git-117)。
有谁知道这里出了什么问题,以及如何让递归推送工作吗?
发布于 2019-05-21 18:47:22
据我所知(我希望被证明是错的!)这不可能。Branches in submodules are an odd beast。
一种接近的解决方法是使用git submodule foreach
命令执行推送。这仍然很烦人,但至少它解决了“乏味”的问题。按如下方式组合命令,以确保子模块推送失败会中止父模块推送:
git submodule foreach --recursive 'git push' &&
git push
据我所知,这在本质上等同于传递--recurse-submodules=on-demand
,但适用于分支。
https://stackoverflow.com/questions/55815011
复制相似问题