我刚开始使用git子模块,但是当递归地推送子模块时,行为并不像预期的那样。
我的git版本是2.26.2.dirty。我的repo很简单,其中root-project有一个子模块'common_misc'。我在common_misc中做了一些修改,添加并提交它。然后转到父目录并添加/提交目录common_misc。
在所有这些之后,我在父目录中运行:
git push --recurse-submodules=按需
它将报告错误:
% git push --recurse-submodules=on-demand
正在推送子模块'common_misc'所有内容都是最新的以下子模块路径包含无法在任何远程设备上找到的更改:普通混合物
请试试
git push --recurse-submodules=按需
或cd到路径并使用
git push
把他们推到遥控器上
致命:流产。
下面是git status在父目录和子目录中的输出:
% git status .
在分支master上您的分支比'origin/master'领先1次提交。(使用“git push”发布本地提交)
无提交,工作树清洁
% cd common_misc
% git status .
在分支dev/test上您的分支比'origin/dev/test'领先1次提交。(使用“git push”发布本地提交)
无提交,工作树清洁
这表明两者都需要推动。
我尝试在父目录和子目录中不递归地推送,这没有任何问题。
2条答案
按热度按时间fkaflof61#
我终于找到问题所在了。
原因是,我在根项目中使用“master”分支,但在子模块中使用“dev/test”分支。当我跑的时候
在根目录中。它将在根目录和子模块目录中推送master分支,尽管我在. gitsubmodules中设置了dev/test。话虽如此,当我cd子模块目录并运行'git push'时,它只会将当前分支(又名dev/test分支)推送到远程仓库。
我不知道这是bug还是特性。我希望看到git团队改进它。
我没有看到其他线程遇到同样的问题,因为我的,所以,只是保持在这里作为记录。
gmxoilav2#
按照你的答案,解决这个问题的一种方法是运行:
这将在 .gitmodules 文件中添加一个**分支=**条目,将子模块链接到相应的分支。
注意SUBMODULE-NAME应该与 .gitmodules 中描述的相同。
在该示例中,SUBMODULE-NAME将是:src/My-project/lib/my-submodule
因此,完整的命令将是: