Git以递归方式更新子模块

时间:2012-04-16 03:38:57

标签: git git-submodules

我的项目结构

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

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

git submodule foreach git pull origin master

git submodule foreach --recursive git pull origin master

但无法拉取Twig的文件。

4 个答案:

答案 0 :(得分:500)

git submodule update --recursive

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

git submodule update --init --recursive

注意:在某些旧版本的Git 中,如果使用--init选项,则可能无法更新已初始化的子模块。在这种情况下,您还应该运行不带--init选项的命令。

答案 1 :(得分:24)

我使用的方式是:

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

答案 2 :(得分:15)

由于可能会发生子模块的默认分支 master(在我的情况下会发生很多),这就是我自动执行完整Git子模块升级的方法:< / p>

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'

答案 3 :(得分:10)

在最近的Git(我使用v2.15.1)中,以下内容将上游子模块更改合并到子模块中:

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

您可以添加--init来初始化任何未初始化的子模块,如果要进行rebase而不是合并,可以使用--rebase

您需要在之后提交更改:

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