如果包含项目不在主分支上,则递归推送子模块将引发“致命错误:src refspec必须命名一个引用”

时间:2019-04-23 15:49:19

标签: git git-submodules

我有一个带有三个子模块的git存储库。包含的存储库有两个分支masterdevelop。所有子模块只有一个分支– 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)。

有人知道这里出了什么问题以及如何进行递归推送吗?

1 个答案:

答案 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 ,但可以使用分支。