我在/modules 目录中有一个带有子模块的 repo。
我现在想强制推送整个 repo 内容,包括。/modules 的内容到另一个 repo(用于部署)。
但是,当我在子模块中进行更改时,目标仓库的内容似乎没有得到更新。这是我运行推送的内容:
- git pull
- git submodule update --init --recursive
- git push -f --recurse-submodules=on-demand https://example.com/deployment.git master
最佳答案
子模块只是 Git 存储库。
您可以使用 git submodule foreach
在每个子模块中运行任意命令。一些 Git 命令有 --recurse-submodules
选项 在每个子模块中运行特定(适当的)命令。 --recurse-submodules=on-demand
git push
的选项是这样的:它会进入修改过的子模块,运行另一个git push
命令 在那些其他 Git 存储库中。
子模块的 git push
似乎1 具有以下形式:
git push <remote> <commit>:<branch>
这要求子模块存储库中有一些分支名称已 checkout 。这个名称显然必须与 super 项目中的分支名称相匹配。然后它显示为 :<branch>
git push
的一部分.
如果子模块推送由于任何原因没有发生,则 super 项目推送失败并且不会发生(被中止)。
我们无法从您的问题中判断(因为您没有包含任何这些命令的任何输出)推送是完成还是失败,如果失败,失败的原因。但是请注意,即使子模块推送本身完成,这也与任何其他 git push
一样。 : 不能保证推送的目标对接收到的任何新提交完全做任何事情。这取决于目标 Git 存储库。
你说:
However, it seems that the contents of the target repo do not get updated when I have changes in the submodule. This is what I run to push the contents:
这里至少有两个目标:子模块存储库的远程和您的 super 项目的远程。哪些没有得到更新?如果有的话,你得到了什么错误?哪些部署策略在子模块的目标和 super 项目的目标(如果有)上有效?
1我做了一些简单的测试并发现了一些错误情况,例如,当子模块 check out 不同的分支名称时。
关于git - 如何将 git 子模块代码与主 repo 代码一起推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67720901/