如何解决如何将 git 子模块代码与主 repo 代码一起推送
我在 /modules 目录中有一个带有子模块的存储库。
我现在想强制推送整个 repo 内容,包括。 /modules 的内容到另一个仓库(用于部署)。
但是,当我在子模块中进行更改时,目标存储库的内容似乎没有更新。这是我用来推送内容的:
- 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
options 以在每个子模块中运行 特定(适当的)命令。 --recurse-submodules=on-demand
的 git push
选项是这样的:它会进入已修改的子模块并在其他 Git 存储库中运行另一个 git push
命令。 >
子模块的 git push
似乎1 具有以下形式:
git push <remote> <commit>:<branch>
这要求子模块存储库有一些分支名称签出。这个名称显然必须与超级项目中的分支名称相匹配。然后它显示为 :<branch>
的 git push
部分。
如果子模块推送由于任何原因没有发生,则超级项目推送失败并且不会发生(被中止)。
我们无法从您的问题(因为您没有包含任何这些命令的任何输出)中判断推送是完成还是失败,如果失败,可能失败的原因。但是请注意,即使子模块推送本身完成,这与任何其他 git push
一样:不能保证推送的目标做任何事情 收到任何新的提交。这取决于目标 Git 存储库。
你说:
但是,当我在子模块中进行更改时,目标存储库的内容似乎没有更新。这是我用来推送内容的:
这里至少有两个目标:子模块存储库的远程,以及您的超级项目的远程。哪些(些)没有得到更新?如果有的话,你得到了什么错误?哪些部署策略对子模块的目标和超级项目的目标(如果有)有效?
1我做了一些简单的测试,发现了一些错误情况,例如,当子模块检出不同的分支名称时。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。