因此,通过运行更新我的所有子模块
git submodule foreach 'git pull origin master'
如何在不更新任何其他子模块的情况下更新位于 say 中的特定子模块?bundle/syntastic
因此,通过运行更新我的所有子模块
git submodule foreach 'git pull origin master'
如何在不更新任何其他子模块的情况下更新位于 say 中的特定子模块?bundle/syntastic
我最终通过搜索如何仅更新特定子模块来结束,这对我来说意味着将子模块更新为其超级存储库指向的引用。这不是问题也不是答案,而只是标题。
因此,为了帮助像我这样的其他人,问题标题的答案是:
git submodule update <specific path to submodule>
这会将这个子模块置于超级仓库中提交的 ref 的状态。
实际上正确的语法是:
$ git clone <remote.git>
$ cd <remote>
$ git submodule update --init -- <specific relative path to submodule>
--remote 此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。使用的遥控器是分支的遥控器(branch..remote),默认为原点。
为了更新特定的子模块,您可以使用:
git submodule update --remote <path to the submodule>
在你的情况下,它应该是:
git submodule update --remote bundle/syntastic
如果您刚刚克隆了带有子模块的 repo,则可以使用以下命令克隆特定的子模块:
git submodule update --init submoduleName
这将克隆该子模块的主模块,您可以从它们 cd 进入子模块并拉出您需要的任何分支。
bundle/syntastic
如何在不更新任何其他子模块的情况下更新位于 say 中的特定子模块?
使用 Git 2.13(以及submodule.<name>.update
配置设置的帮助):
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/master
SHA1 处检查。
通过添加submodule.<name>.update
配置设置,您可以确保子模块的选择性克隆将跟随更新,仅针对该子模块。
作为 Git 2.13(2017 年第二季度)“活动子模块”功能的一部分(请参阅“忽略新提交git submodule
”),您拥有来自Brandon Williams ( )的提交 bb62e0a:bmwill
clone
:教--recurse-submodules
有选择地采用路径规范教克隆
--recurse-submodules
可选地采用 pathspec 参数,该参数描述应递归初始化和克隆哪些子模块。
如果没有提供路径规范,--recurse-submodules
将使用默认路径规范“.
”递归初始化和克隆所有子模块。
为了构造更复杂的pathspecs,--recurse-submodules
可以多次给出。这也将 '
submodule.active
' 配置选项配置为给定的路径规范,这样任何未来的调用都git submodule update
将跟上路径规范。此外,开关“
--recurse
”已从文档中删除,并在选项数组中标记为隐藏,以简化子模块的选项。一个简单的 '--recurse
' 不能表达递归的意思,例如它可能意味着目录或树(cfls-tree
)。
在许多其他命令中,我们已经使用 '--recurse-submodules
' 来表示递归到子模块中,所以在这里宣传这个拼写是真正的选项。
所以git clone --recursive
手册页现在显示:
--recurse-submodules[=<pathspec]:
创建克隆后,根据提供的 pathspec 初始化和克隆其中的子模块。
如果没有提供 pathspec,所有子模块都会被初始化和克隆。
子模块使用其默认设置进行初始化和克隆。
结果克隆已submodule.active
设置为提供的路径规范,.
如果未提供路径规范,则为“”(表示所有子模块)。
这相当于git submodule update --init --recursive
克隆完成后立即运行。如果克隆的存储库没有工作树/签出,则忽略此选项(即,如果 给定--no-checkout
/-n
、--bare
或--mirror
中的任何一个)
t/t7400-submodule-basic.sh
测试示例:
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 ( ) 的提交 5c38742(2019 年 4 月 29 日)。(由Junio C Hamano 合并 -- --在2cfab60 提交中,2019 年 5 月 19 日)pclouds
gitster
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
: teaching--recurse-submodules
to optional take a pathspec", 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 中使用它。