Git递归更新子模块

我的项目结构

ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)

如何递归更新子模块?我已经尝试了一些git命令(在ProjectA根目录上)

git submodule foreach git pull origin master

git submodule foreach --recursive git pull origin master

但无法拉出Twig的文件。

432402 次浏览
git submodule update --recursive

你可能还想使用——init选项来初始化任何未初始化的子模块:

git submodule update --init --recursive

注意:在一些较旧版本的Git中,如果你使用--init选项,已经初始化的子模块可能不会被更新。在这种情况下,你也应该运行没有--init选项的命令。

我使用的方法是:

git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge origin master

可能发生的情况是,你的子模块的默认分支是 master(在我的情况下经常发生),这就是我如何自动升级完整的Git子模块:

git submodule init
git submodule update
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

在最近的Git中(我使用v2.15.1版本),下面将递归地将上游子模块的更改合并到子模块中:

git submodule update --recursive --remote --merge

你可以添加--init来初始化任何未初始化的子模块,如果你想重基而不是合并,可以使用--rebase

你需要在之后提交更改:

git add . && git commit -m 'Update submodules to latest revisions'

你可以在你的Makefile中添加以下内容:

submodule:
git submodule update --init --recursive
git submodule foreach 'git fetch origin; git checkout $$(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

然后,你可以在每次想要更新子模块时简单地运行make submodule

我有一个子模块导致了问题(“fatal:…”桑安德里亚(Sanandrea)在报告中写道。导航到子模块并使用'git clean -dfx'来解析它。

如何

Git配置全局子模块。递归实现

然后忘掉它?