有人提出了很多关于自动更新子模块的问题 StackOverflow包括:
git checkout
automatically do git submodule update --recursive
? 但在我看来,对于git子模块,还没有单一的方法,就像svn-externals一样有效svn up
。
因为git每天都在变化,我敢再问:
init 和自动更新子模块检出(即与其对应的子模块提交ID保持同步){{1 } 和 checkout
(即pull
和merge
)?
目前我有两种方法:
#1:使用以下内容创建rebase
,post-checkout
和post-merge
摘要
post-rewrite
你已经可以看到这种方法有几个缺点:
#2:为#!/bin/sh
git submodule update --init --recursive
和pull
配置别名
checkout
但这并不好:
git config --global alias.up 'pull --recurse-submodules'
git config --global alias.co 'checkout --recurse-submodules'
子模块(可以通过分别运行--init
/ pull
和checkout
来解决submodule update
/ up
而不是co
/ pull
如果你能做某件事,这种方法会更像我希望它 像
checkout
..但你不能,是吗?
答案 0 :(得分:1)
自Git 2.13起,您可以执行git checkout --recurse-submodules <ref>
,以确保活动子模块的工作树与超级项目中记录的子模块提交同步,该操作位于: <ref>
。
自Git 2.14起,您可以执行git pull --recurse-submodules
,这将执行常规拉动,然后调用git submodule update --init --recursive
(如果您使用--rebase
拉动,则将使用--rebase
),使活动子模块的工作树与超级项目中记录的子模块提交保持同步。
自Git 2.15起,设置git config submodule.recurse true
将使其成为接受--recurse-submodules
标志的all commands的默认行为,但clone
和ls-files
除外
没有任何方法可以使此行为成为默认的,而无需更改配置或使用这些选项。
请注意,当当前分支没有子模块并且git checkout --recurse-submodules <branch>
已初始化嵌套子模块时,在Git 2.27之前执行<branch>
。