我sup
别名为submodule foreach 'git co master; git up'
co
& up
分别是checkout
和pull --rebase
的别名。)。
如何添加条件以便子模块名称为Libraries/JSONKit
时,它会检出名为experimental
的分支,而不是master
?
答案 0 :(得分:14)
将脚本passwd传递给git submodule
并将其工作目录设置为给定子模块的顶部...因此您只需查看pwd
以查看您是否在您身边在特定的子模块中。但是,如果您花一些时间阅读git submodule
文档,结果会更加简单:
foreach
Evaluates an arbitrary shell command in each checked out submodule. The
command has access to the variables $name, $path, $sha1
and $toplevel: $name is the name of the relevant submodule section in
.gitmodules, $path is the name of the submodule directory
relative to the superproject, $sha1 is the commit as recorded in the superproject,
and $toplevel is the absolute path to the top-level of the superproject.
所以你可以这样做:
git submodule foreach '[ "$path" = "Libraries/JSONKit" ] \
&& branch=experimental \
|| branch=master; git co $branch'
答案 1 :(得分:1)
git submodule foreach '[ "$path" = "Libraries/JSONKit" ]
但现在应该是(2020年)
git submodule foreach '[ "$sm_path" = "Libraries/JSONKit" ]
在Git 2.26(2020年第一季度)中,大量“ git submodule foreach
”已经用C语言重写,并且其文档也不断发展。
请参见commit fc1b924的commit b6f7ac8(2018年5月10日)和commit f0fd0dc,commit c033a2f,Prathamesh Chavan (pratham-pc
)(2018年5月9日)。
(由Junio C Hamano -- gitster
--在commit ea27893中合并,2018年6月25日)
submodule foreach
:文档“$sm_path
”而不是“ $ path”由于大写问题,使用变量'$ path'可能对用户有害,请参见64394e3ae9(“
git submodule
。sh:不要在eval_gettext
中使用$ path变量字符串”,2012-04-17,Git v1.7.11-rc0-merge中列出的batch #4)。
调整文档以提倡使用$sm_path
,该文档包含相同的值。
我们仍然提供'path
'变量,并将其记录为'sm_path
'的不推荐使用的同义词。讨论过:拉姆齐·琼斯
Documentation/git-submodule#foreach
现在包括:
foreach [--recursive] <command>
:在每个检出的子模块中评估一个任意的shell命令。
该命令可以访问变量
$name
,$sm_path
,$sha1
和$toplevel
:
$name
是.gitmodules
中相关子模块部分的名称。- 中记录的子模块的路径
$sm_path
是直接超级项目$sha1
是直接超级项目中记录的提交,并且$toplevel
是直接超级项目顶层的绝对路径。请注意,为避免与Windows上的'
$PATH
'冲突,'$path
'变量现已弃用'$sm_path
'变量的同义词。
答案 2 :(得分:-2)
将以下内容添加到.git/config
:
[alias]
sup = "submodule foreach 'if [ $name == \"Libraries/JSONKit\" ]; then git co experimental; else git co master; fi; git up'"