Answers:
git submodule update --recursive
您可能还想使用--init选项,这将使它初始化所有未初始化的子模块:
git submodule update --init --recursive
注意:在某些较旧的Git版本中,如果使用该--init
选项,则可能不会更新已初始化的子模块。在这种情况下,您还应该运行不带--init
选项的命令。
--init
使用的话)不会更新的说明与我在Git 2.2.2上的经验不符。我在使用时会看到已经初始化过的顶层子模块和嵌套子模块,都可以检出正确的提交git submodule update --init --recursive
,我认为需要使用和不使用运行命令的说法--init
是错误的。除非有人能证明这是行为,或者证明它在版本之间已更改且曾经是真实的,否则我计划将其完全删除。
我使用的方式是:
git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge origin master
git submodule foreach git pull --ff-only origin master
git submodule foreach --recursive 'git commit -a | :'
。将:
使其循环,无论结果。请参阅链接stackoverflow.com/questions/19728933/…。
可能会发生子模块的默认分支未 打开的情况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'
Entering 'Core' fatal: ambiguous argument 'origin/HEAD': unknown revision or path not in the working tree.
在哪里Core
在最近的Git中(我正在使用v2.15.1),以下内容将递归地将上游子模块更改合并到子模块中:
git submodule update --recursive --remote --merge
您可以添加--init
以初始化所有未初始化的子模块,并--rebase
在要重新设置基础而不是合并时使用。
您需要随后提交更改:
git add . && git commit -m 'Update submodules to latest revisions'
git submodule update --remote my-dir/my-submodule
同样有效