我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
当前回答
下面是另一种从. Git modules解析Git子模块名称的方法,不需要sed或花哨的IFS设置。: -)
#!/bin/env bash
function stripStartAndEndQuotes {
temp="${1%\"}"
temp="${temp#\"}"
echo "$temp"
}
function getSubmoduleNames {
line=$1
len=${#line} # Get line length
stripStartAndEndQuotes "${line::len-1}" # Remove last character
}
while read line; do
getSubmoduleNames "$line"
done < <(cat .gitmodules | grep "\[submodule.*\]" | cut -d ' ' -f 2-)
其他回答
下面的命令将列出子模块:
git submodule--helper list
输出如下所示:
<mode> <sha1> <stage> <location>
注意:需要Git 2.7.0或以上版本。
Use:
$ git submodule
它将列出指定Git存储库中的所有子模块。
为了只返回已注册的子模块的名称,你可以使用这个命令:
grep path .gitmodules | sed 's/.*= //'
可以把它看成是git子模块list,它并不存在。
下面是另一种从. Git modules解析Git子模块名称的方法,不需要sed或花哨的IFS设置。: -)
#!/bin/env bash
function stripStartAndEndQuotes {
temp="${1%\"}"
temp="${temp#\"}"
echo "$temp"
}
function getSubmoduleNames {
line=$1
len=${#line} # Get line length
stripStartAndEndQuotes "${line::len-1}" # Remove last character
}
while read line; do
getSubmoduleNames "$line"
done < <(cat .gitmodules | grep "\[submodule.*\]" | cut -d ' ' -f 2-)
如果你不介意只对初始化的子模块进行操作,你可以使用git子模块foreach来避免文本解析。
git submodule foreach --quiet 'echo $name'