git - 如何将 git 子模块代码与主 repo 代码一起推送

标签 git git-submodules git-push

我在/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/

相关文章:

Git 在将子模块更改推送到原点时速度很慢

git push origin master 不推送文件

Git 推送被拒绝并且获取失败

git - Rails : why is there . 在每个目录中保留文件

git - 清理已删除文件的 git 历史记录,保留重命名的文件历史记录

git - 有没有办法*不*克隆它来 `git submodule add` 一个 repo ?

git - 以编程方式获取 bash 中 git 目录的路径(包括子模块)

xcode - 迪尔德 : lazy symbol binding failed: can't resolve symbol

git fetch origin --prune 不删除本地分支?

git - 如何列出尚未推送到源的git子模块?