因此,更新我的所有子模块都是通过运行
来完成的git submodule foreach 'git pull origin master'
如何在不更新任何其他子模块的情况下更新位于bundle/syntastic
的特定子模块?
答案 0 :(得分:34)
我最后通过搜索如何更新特定的子模块来结束,这对我来说,更新子模块到它的super-repo指向的ref。 这不是问题,也不是答案,只是标题。
所以希望能帮助像我这样的其他人对问题标题的回答是:
git submodule update <specific path to submodule>
将把这个子模块置于超级仓库中提交的ref状态。
答案 1 :(得分:26)
实际上正确的语法是:
$ git clone <remote.git>
$ cd <remote>
$ git submodule update --init -- <specific relative path to submodule>
答案 2 :(得分:11)
如果您刚刚克隆了包含子模块的仓库,则可以使用以下方法克隆特定子模块:
git submodule update --init submoduleName
这将克隆该子模块的主人,从他们可以cd进入子模块并拉出你需要的任何分支。
答案 3 :(得分:7)
- remote此选项仅对更新命令有效。不使用超级项目记录的SHA-1来更新子模块,而是使用 子模块的远程跟踪分支的状态。使用的遥控器是 branch的remote(branch..remote),默认为origin。
为了更新特定的子模块,您可以使用:
git submodule update --remote <path to the submodule>
在你的情况下,它应该是:
git submodule update --remote bundle/syntastic
答案 4 :(得分:2)
如何在不更新任何其他子模块的情况下更新位于
bundle/syntastic
的特定子模块?
使用Git 2.13:
git clone --recurse-submodules="bundle/syntastic"
作为Git 2.13(2017年第二季度)&#34;活跃子模块&#34;的一部分。功能(请参阅&#34; Ignore new commits for git submodule
&#34;),您有来自commit bb62e0a的Brandon Williams (bmwill
):
clone
:教--recurse-submodules
选择路径规范教克隆
--recurse-submodules
以选择性地获取pathspec参数 它描述了应该递归初始化哪些子模块 克隆。
如果未提供pathspec,--recurse-submodules
将使用&#34;.
&#34;的默认路径规则递归初始化并克隆所有子模块。
为了构造更复杂的路径规范,--recurse-submodules
可以多次给出。这也会配置&{39;
submodule.active
&#39;配置选项 给定的pathspec,以便将来git submodule update
的任何调用都能跟上pathspec。此外,交换机&#39;
--recurse
&#39;从文档中删除 以及在选项数组中隐藏的标记,以简化选项 对于子模块。一个简单的--recurse
&#39;不会传达正在发生的事情 递归,例如它可能意味着目录或树木(c.f。ls-tree
) 在很多其他命令中我们已经有了--recurse-submodules
&#39;意思是 递归到子模块,所以在这里宣传这个拼写为 真正的选择。
所以git clone --recursive
man page现在读取:
--recurse-submodules[=<pathspec]:
创建克隆后,根据提供的pathspec 初始化和克隆子模块。
如果未提供pathspec,则会初始化并克隆所有子模块。
使用默认设置初始化和克隆子模块 生成的克隆已将
submodule.active
设置为提供的路径规范,或者&#34;.
&#34; (如果没有提供pathspec,则表示所有子模块) 这相当于克隆完成后立即运行git submodule update --init --recursive
。如果克隆,则忽略此选项 存储库没有工作树/结帐(即如果有的话) 已提供--no-checkout
/-n
,--bare
或--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年第二季度)和#34; git clone --recurs
&#34;效果更好。
commit 5c38742见Nguyễn Thái Ngọc Duy (pclouds
)(2019年4月29日)
(由Junio C Hamano -- gitster
--合并于commit 2cfab60,2019年5月19日)
parse-options
:不要发出&#34;模棱两可的选项&#34;对于别名更改选项解析机制,以便例如&#34;
clone --recurs ...
&#34; 没有错误,因为&#34;clone
&#34;理解&#34;--recursive
&#34;和 &#34;--recurse-submodules
&#34;意思是同样的事情。最初&#34;克隆&#34;只是理解 - 递归直到 ccdd3da中添加了
--recurses-submodules
别名(&#34;clone
:添加--recurse-submodules
选项作为--recursive
&#34;的别名, 2010-11-04,Git v1.7.4-rc0)。
自bb62e0a(&#34;clone
:教--recurse-submodules
以来 可选择路径规范&#34;,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中。