Kai*_*rdt 5 git git-submodules
我有一个带有三个子模块的git存储库。包含的存储库有两个分支master和develop。所有子模块只有一个分支– master分支。
当包含的存储库位于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
Run Code Online (Sandbox Code Playgroud)
我可以通过首先手动推送每个子模块中的更改,然后推送包含的存储库来缓解此问题。但是,这非常繁琐,并且违反了的目的--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
Run Code Online (Sandbox Code Playgroud)
我正在使用git版本2.20.1(Apple Git-117)。
有人知道这里出了什么问题以及如何进行递归推送吗?
据我所知(我\xe2\x80\x99d喜欢被证明是错误的!)子模块分支没有\xe2\x80\x9crecursive push\xe2\x80\x9d。一般来说,子模块中的分支是一种奇怪的野兽,don\xe2\x80\x99t 的工作方式与 Git 中的常规分支相同。
\n一个接近的解决方法是使用git submodule foreach命令来执行推送。这仍然很烦人,但至少它解决了 \xe2\x80\x9ctedious\xe2\x80\x9d 方面。按如下方式组合命令以确保子模块推送失败会中止父模块推送:
git submodule foreach --recursive \'git push\' &&\ngit push\nRun Code Online (Sandbox Code Playgroud)\n据我所知,这本质上等同于 pass --recurse-submodules=on-demand,但适用于分支。