如何在不更新任何其他子模块的情况下更新位于 bundle/syntastic 中的特定子模块?
使用 Git 2.13(以及 submodule.<name>.update config setting 的帮助):
git clone --recurse-submodules="bundle/syntastic"
git config submodule.syntastic.update "git pull origin master"
需要第二行(只执行一次),因为clone --recurse-submodules[=<pathspec] 命令相当于在克隆完成后立即运行git submodule update --init --recursive <pathspec>。
这只会在其 gitlink 记录的 SHA1 中检查子模块,不是在最新的远程 origin/masterSHA1。
通过添加submodule.<name>.update config setting,您可以确保子模块的选择性克隆之后将更新,仅针对该子模块。
作为 Git 2.13(2017 年第二季度)“活动子模块”功能的一部分(请参阅“Ignore new commits for git submodule”),您拥有来自 Brandon Williams (bmwill) 的 commit bb62e0a:
clone:教 --recurse-submodules 选择采用路径规范
教克隆--recurse-submodules 选择使用路径规范参数
它描述了哪些子模块应该被递归初始化和
克隆。
如果未提供路径规范,--recurse-submodules 将使用默认路径规范“.”递归初始化和克隆所有子模块。
为了构造更复杂的路径规范,--recurse-submodules 可以多次给出。
这也将“submodule.active”配置选项配置为
给定的路径规范,这样以后对git submodule
update 的任何调用都将跟上路径规范。
此外,开关“--recurse”已从文档中删除为
以及在选项数组中标记为隐藏,以简化选项
对于子模块。一个简单的 '--recurse' 并不能传达正在发生的事情
递归的,例如它可能意味着目录或树 (c.f. ls-tree)。
在许多其他命令中,我们已经有 '--recurse-submodules' 来表示
递归到子模块中,所以在这里宣传这个拼写作为
真正的选择。
所以git clone --recursive man page 现在变为:
--recurse-submodules[=<pathspec]:
创建克隆后,根据提供的路径规范初始化并克隆其中的子模块。
如果没有提供路径规范,所有子模块都会被初始化和克隆。
使用默认设置初始化和克隆子模块。
生成的克隆将submodule.active 设置为提供的路径规范,如果未提供路径规范,则为“.”(表示所有子模块)。
这相当于在克隆完成后立即运行git submodule update --init --recursive。如果克隆了该选项,则忽略此选项
存储库没有工作树/结帐(即,如果任何
--no-checkout/-n, --bare, or --mirror 给定)
来自t/t7400-submodule-basic.sh test的示例:
git clone --recurse-submodules="." \
--recurse-submodules=":(exclude)sub0" \
--recurse-submodules=":(exclude)sub2" \
multisuper multisuper_clone
这将克隆和更新每个子模块,sub0 和 sub2 除外。
奖励,使用 Git 2.22(2019 年第二季度)“git clone --recurs”效果更好。
参见Nguyễn Thái Ngọc Duy (pclouds) 的commit 5c38742(2019 年 4 月 29 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 2cfab60,2019 年 5 月 19 日)
parse-options: 不要为别名发出“模糊选项”
更改选项解析机制,例如“clone --recurs ...”
不会出错,因为“clone”同时理解“--recursive”和
“--recurse-submodules”表示相同的意思。
最初“克隆”只是理解 --recursive 直到
--recurses-submodules 别名已添加到 ccdd3da ("clone: 添加
--recurse-submodules 选项作为 --recursive 的别名",
2010-11-04,Git v1.7.4-rc0)。
自bb62e0a("clone:教--recurse-submodules到
可选地采用路径规范”,2017-03-17,Git v2.13.0-rc0) 较长的形式是
提升为默认值。
但是由于选项解析机器的工作方式,这导致了
在相当荒谬的情况下:
$ git clone --recurs [...]
error: ambiguous option: recurs (could be --recursive or --recurse-submodules)
添加OPT_ALIAS() 表示两个或多个选项之间的这种联系并使用
它在 git-clone 中。