我有一个带有三个子模块的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
我可以通过首先手动推送每个子模块中的更改,然后推送包含的存储库来缓解此问题。但是,这非常繁琐,并且违反了--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)。
有人知道这里出了什么问题以及如何进行递归推送吗?
答案 0 :(得分:0)
据我所知(我想证明是错误的!)是不可能的。 Branches in submodules are an odd beast。
一种紧密的解决方法是使用parameters:
hash: $2y$13$I5uLW8atzRPmC3NcvirYqO2htdMHH1l4uFQ3z0V8wHowO0FqTXl7u
App\Document\Trainee:
trainee (template):
password: <{hash}>
...
命令执行推送。这仍然很烦人,但至少可以解决“乏味”的方面。组合以下命令,以确保失败的子模块推送中止了父模块推送:
git submodule foreach
据我所知,这基本上等同于传递git submodule foreach 'git push' && \
git push
,但可以使用分支。